我正在编写一个实用程序,它反映两个对象图,并返回一个值来指示图是否相同。这让我想,有没有一个普遍接受的模式来编写递归算法,从递归中的某个位置返回一个值?
我的解决方案可能会使用一个ref参数,并类似于以下伪代码:
public static bool IsChanged(T current, T previous)
{
bool isChanged = false;
CheckChanged(current, previous, ref isChanged);
return isChanged ;
}
private static void CheckChanged(T current, T previous, ref isChanged)
{
//perform recursion
if (graphIsChanged)
isChanged = true;
else
CheckChanged(current, previous, ref isChanged);
}
有没有更好/更干净/更有效的方法这样的功能是否有一个通用的模式?
最佳答案
与这个非常琐碎的版本相比,我看不出你的版本有什么好处:
public static bool IsChanged(T current, T previous)
{
//perform recursion
if (graphIsChanged)
return true;
else
return IsChanged(current, previous);
}
另一个好处是,一些编译器能够使用尾部调用优化将此版本转换为一个简单的循环,这样更有效。