有人可以帮我理解这个递归函数吗?我一直在关注一个在线教程,但我坚持这个部分:
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的值,但这对我没有意义。
答案 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
看起来你是第一次玩递归。它最初看起来很混乱,但它是一个很好的问题解决方法,可以让你用最少的代码解决问题。进一步探索!!并希望它有所帮助。