【发布时间】:2012-10-06 20:46:53
【问题描述】:
我试图理解下面代码 sn-p 中的递归调用。
static long fib(int n) {
return n <= 1 ? n : fib(n-1) + fib(n-2);
}
首先调用哪个函数调用?调用后等式如何运作?
这两个都被调用一次然后应用方程还是第一个调用然后第二个?
也许是一个非常简单的问题!
【问题讨论】:
-
你可以尝试打印n的值,自己找出来。
-
@DavidBejar “试试看”并不总是好的建议,尤其是在行为可能是实现定义或未定义的情况下 (
i = i++)。 -
如果你只想知道函数被调用的顺序是没有用的,但是一本非常流行的教科书《计算机程序结构与解释》在Section 1.2.2.
-
@JohnKugelman “试试看”在处理递归时是特别危险的建议,如果你弄错了函数可能永远不会返回;)