我正在编写一个实用程序,它反映两个对象图,并返回一个值来指示图是否相同。这让我想,有没有一个普遍接受的模式来编写递归算法,从递归中的某个位置返回一个值?
我的解决方案可能会使用一个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);
}

另一个好处是,一些编译器能够使用尾部调用优化将此版本转换为一个简单的循环,这样更有效。

07-26 04:54