編程語言使用「呼叫-stack「來跟蹤哪些函數被調用以及它們包含哪些值。每調用一次Factorial
,它都會連同其變量值一起添加到堆棧中。這被稱爲上下文。因此,調用堆棧看起來像:
Factorial(5)
Factorial(5) * Factorial(4)
Factorial(5) * Factorial(4) * Factorial(3)
Factorial(5) * Factorial(4) * Factorial(3) * Factorial(2)
Factorial(5) * Factorial(4) * Factorial(3) * Factorial(2) * Factorial(1)
Factorial(5) * Factorial(4) * Factorial(3) * Factorial(2) * Factorial(1) * Factorial(0)
在這個階段,VAL == 0這樣1將從調用返回階乘(0)。這個上下文現在從調用堆棧中「彈出」,並且返回的值在下一個上下文中用於計算值(在本例中爲1 * 1),然後返回到下一個上下文(2 *(1 * 1 )):
Factorial(5) * Factorial(4) * Factorial(3) * Factorial(2) * Factorial(1) * 1
Factorial(5) * Factorial(4) * Factorial(3) * Factorial(2) * (1 * 1)
Factorial(5) * Factorial(4) * Factorial(3) * (2 * (1 * 1))
Factorial(5) * Factorial(4) * (3 * (2 * (1 * 1)))
Factorial(5) * (4 * (3 * (2 * (1 * 1))))
(5 * (4 * (3 * (2 * (1 * 1)))))
這是一個非常一般的解釋,我只是想爲您提供一個替代方案。試着瞭解,每次調用Factorial
都嵌套在先前的調用中,然後所有返回值必須組合才能得到最終結果。
從這裏開始https://en.wikipedia.org/wiki/Recursive_function – Steve
謝謝史蒂夫幫忙,但我不會說英語well.If你可以向我解釋這個例子 –