遇到递归函数问题

时间:2014-09-09 02:58:01

标签: c++ function recursion

有人可以帮我理解这个递归函数吗?我一直在关注一个在线教程,但我坚持这个部分:

int factorialFinder(int x){
    if(x==1){
        return 1;
    }else{
        return x * factorialFinder(x-1);
    }

}

所以我知道这个函数用于计算整数x的阶乘,但我不理解return x * factorialFinder(x-1);

这行是否将x的值乘以x-1,或者首先查找基本情况然后将这些值相乘?它向我解释的方式是函数查找x == 1然后它乘以x的值,但这对我没有意义。

1 个答案:

答案 0 :(得分:1)

让我们考虑x = 4 所以函数调用栈将是

factorialFinder(4) returns 4*factorialFinder(3)

factorialFinder(3) returns 3*factorialFinder(2)

factorialFinder(2) returns 2*factorialFinder(1)

factorialFinder(1) returns 1 *base condition*

现在只需替换​​返回值。由于它是一个堆栈,因此将首先评估最后一个函数调用

所以

factorialFinder(1) = 1
factorialFinder(2) = 2*1
factorialFinder(3) = 3*2*1
factorialFinder(4) = 4*3*2*1

看起来你是第一次玩递归。它最初看起来很混乱,但它是一个很好的问题解决方法,可以让你用最少的代码解决问题。进一步探索!!并希望它有所帮助。