package fibonacci;
public class Fib {
static int fib(int n)
{
System.out.println("fib(" + n + ") called");
if(n<=1)
{
return n;
}
int temp = fib(n-1) + fib(n-2);
System.out.println("returning to fib(" + n +")" );
return temp;
}
public static void main(String[] args)
{
System.out.println("fib(5): " + fib(5));
}
}
输出:
fib(5)称为
fib(4)称为
fib(3)称为
fib(2)称为
fib(1)称为
fib(0)称为
回到fib(2)
fib(1)称为
回到fib(3)
fib(2)称为
fib(1)称为
fib(0)称为
回到fib(2)
回到fib(4)
fib(3)称为
fib(2)称为
fib(1)称为
fib(0)称为
回到fib(2)
fib(1)称为
回到fib(3)
回到fib(5)
fib(5):5
答案 0 :(得分:4)
这可以通过following section of JLS -
来解释Java编程语言保证了操作数 运算符似乎在特定的评估顺序中进行评估, 即,从左到右。
在你的情况下,左操作数是对fib(n-1)
的调用,因此它将被完全评估以计算最终值,然后才会评估正确的操作。
答案 1 :(得分:0)
因为执行的第一部分首先被调用,例如,如果您这样做:
void dfs(int x) {
dfs(x-1);
dfs(x-2);
}
然后将首先调用dfs(x-1),因此将再次调用dfs,并且dfs(x-1)将再次调用,因为它是第一条指令,依此类推,直到最后一条dfs(x -1)被调用然后程序继续dfs(x-2)。
我希望它有所帮助。