int fib(int i) {
if(i<2) {
return 1;
}
else {
return fib(i-1) + fib(i-2) ;
}
}
我无法理解如何处理语句返回fib(i-1) + fib(i-2)
?
fib(i-1)
是否先被处理,fib(i-2)
还是同时被处理?
此外,假设fib(i-1)=3
,然后在这种情况下,fib(i-1)=3
的计算方式。.我知道进一步调用了fib(i-1)=2
和fib(i-1)=1
,它们得到了{{1两种情况下都作为回报。然后如何基于1
和fib(i-1)=3
计算fib(i-1)=2
?
答案 0 :(得分:0)
类似的东西:
fib(4) =
fib(3) + fib(2) =
fib(2) + fib(1) + fib(2) =
fib(1) + fib(0) + fib(1) + fib(2) =
1 + fib(0) + fib(1) + fib(2) =
1 + 1 + fib(1) + fib(2) =
2 + fib(1) + fib(2) =
2 + 1 + fib(2) =
3 + fib(2) =
3 + fib(1) + fib(0) =
3 + 1 + fib(0) =
4 + fib(0) =
4 + 1 =
5
没有任何事情可以“同时”执行,它只是多次调用fib
,同时评估了您对fib(4)
的第一次调用。
答案 1 :(得分:0)
每次遇到语句return fib(i-1) + fib(i-2) ;
时,它必须先找出fib(i-1)
是什么,然后才知道fib(i-2)
是什么。每当我不满足小于2的要求时,都必须转到return fib(i-1) + fib(i-2) ;
的实例。然后,它首先寻找fib(i-1)
是什么,然后寻找fib(i-2)
是什么。如果fib(i-1)
是导致它转到else语句的另一个实例的原因,则意味着它将在寻找第一个{之前,先寻找第二个fib(i-1)
,然后寻找第二个fib(i-2)
。 {1}},因为需要这些第二部分来确定第一个fib(i-2)
是什么。只要不满足if语句要求,它将继续与else语句一起走得更远。一旦它从if语句得到其第一个1,则它将能够开始填充先前遇到的fib(i-1)
和fib(i-1)
的所有值,直到返回到第一个。 fib(i-2)
。只有这样,它才能继续前进到第一个fib(i-1)
,然后按需要进入if语句,然后再输入这些1,然后将它们加起来以找出第一个fib(i-2)
是什么。如果这只会使事情变得更加混乱,我建议使用箭头将其写出来,以显示正在采取的步骤,这样您就可以清楚地知道自己的位置以及所做的一切。这样做对我第一次学习Fibonacci递归时有帮助。
答案 2 :(得分:-1)
fib(4) = fib(3) + fib(2)
fib(2) + fib(1) + fib(1) + fib(0)
fib(1) + fib(0) + 1 + 1 + 1
1 + 1 + 1 + 1 + 1 = 5