递归算法:建议的模式和实践?

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)

有更好/更清洁/更有效的方式吗?这种功能有一般模式吗?

and*_*dri 6

与这个非常简单的版本相比,我认为您的版本没有任何好处:

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)

作为一个额外的好处,一些编译器能够使用尾调用优化将这个版本变成一个简单的循环,这更有效.