fle*_*esh 0 algorithm recursion design-patterns
我正在编写一个实用程序,它反映在两个对象图上,并返回一个值来指示图表是否相同.它让我思考,是否有一种普遍接受的模式来编写递归算法,该算法从递归中的某些位置返回值?
我的解决方案可能会使用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);
}
Run Code Online (Sandbox Code Playgroud)
有更好/更清洁/更有效的方式吗?这种功能有一般模式吗?
与这个非常简单的版本相比,我认为您的版本没有任何好处:
public static bool IsChanged(T current, T previous)
{
//perform recursion
if (graphIsChanged)
return true;
else
return IsChanged(current, previous);
}
Run Code Online (Sandbox Code Playgroud)
作为一个额外的好处,一些编译器能够使用尾调用优化将这个版本变成一个简单的循环,这更有效.