我很好奇在使用递归函数时返回是如何工作的。例如,在下面的阶乘函数中,在任何计算实际发生之前x都将达到1。带递归函数返回
int factorial (int x){
if (x==1){
return 1;
}else{
return x * factorial(x - 1);
}
}
假设x = 3
。继逻辑,现在看来,这应该循环3次,并返回1:
3 != 1
- 所以别人:
3 * factorial (2)
。 - 什么是
factorial (2)
? - 那么返回顶部:
2 != 1
- 如此:
2 * factorial (1)
。 - 什么是
factorial (1)
? - 返回顶部:
1 == 1
, - 所以:
return 1
。
但是,当然它实际上会返回6.所以它是如何工作的?
实验!你就是这样学习的。 – 2013-04-21 01:00:01
你应该阅读一个基本的递归教程。基本上,您有一个调用堆栈,直到您到达基本案例(在本例中为'x == 1')为止,然后将调用堆栈解析为“向后”,直到它返回第一个函数调用。 – 2013-04-21 01:01:24
[理解递归]的可能的重复(http://stackoverflow.com/questions/717725/understanding-recursion) – 2013-04-21 01:03:57