我很好奇在使用遞歸函數時返回是如何工作的。例如,在下面的階乘函數中,在任何計算實際發生之前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