有条件地执行函数的最佳方法是什么?

Mif*_*Fox 2 c# recursion

是的,我知道这个措辞很难理解,但这让我很烦恼.在最近的一个项目中,我有一个recurses函数,并且有许多条件会导致它停止递归(目前为三).哪种情况可选?(IE最佳性能或最简单的维护).

1)有条件退货:

void myRecursingFunction (int i, int j){
    if (conditionThatWouldStopRecursing) return;
    if (anotherConditionThatWouldStopRecursing) return;
    if (thirdConditionThatWouldStopRecursing) return;

    doSomeCodeHere();
    myRecursingFunction(i + 1, j);
    myRecursingFunction(i, j + 1);
}
Run Code Online (Sandbox Code Playgroud)

2)用if语句包装整个东西

void myRecursingFunction (int i, int j){
    if (
        !conditionThatWouldStopRecursing &&
        !anotherConditionThatWouldStopRecursing &&
        !thirdConditionThatWouldStopRecursing
    ){
        doSomeCodeHere();
        myRecursingFunction(i + 1, j);
        myRecursingFunction(i, j + 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

3)你做错了noob,没有理智的算法会使用递归.

Eri*_* J. 6

这两种方法都应该在幕后产生相同的IL代码,因为它们是等效的布尔表达式.请注意,每个终止条件将按您编写的顺序进行评估(因为编译器无法确定哪个最有可能),因此您需要首先放置最常见的终止条件.

尽管结构化编程规定第二种方法更好,但我个人更喜欢将返回条件编码为递归方法顶部的单独块.我发现更容易阅读和遵循(虽然我不是方法体的随机区域中的返回的粉丝).