Java 斐波那契递归是如何工作的 intfib(inti){ 如果(i
某事物沿着以下路线:Java 斐波那契递归是如何工作的 intfib(inti){ 如果(i,java,recursion,fibonacci,Java,Recursion,Fibonacci,某事物沿着以下路线: int fib(int i) { if(i<2) { return 1; } else { return fib(i-1) + fib(i-2) ; } } 没有什么是“同时”执行的,它只是在自己多次调用fib,同时评估您对fib(4)的第一次调用,每次它运行到语句return fib(i-1)+fib(i-2);,它必须先找出fib(i-1),然后找出fib(i-2)是什么每次都是。每次当我没有满足小
int fib(int i) {
if(i<2) {
return 1;
}
else {
return fib(i-1) + fib(i-2) ;
}
}
没有什么是“同时”执行的,它只是在自己多次调用
fib
,同时评估您对fib(4)
的第一次调用,每次它运行到语句return fib(i-1)+fib(i-2);
,它必须先找出fib(i-1)
,然后找出fib(i-2)是什么
每次都是。每次当我没有满足小于2的要求时,它必须转到返回fib(i-1)+fib(i-2);
。然后它首先查找fib(i-1)
是什么,然后查找fib(i-2)
是什么。如果fib(i-1)
是导致它转到else语句的另一个实例的原因,这意味着它将查找第二个fib(i-1)
,然后是第二个fib(i-2)
然后再查找第一个fib(i-2)
,因为需要这些第二部分来确定第一个fib(i-1)是什么
is。只要它不满足if语句的要求,它将继续使用else语句进行更深入的操作。一旦它从if语句中得到第一个1,它将能够开始填充fib(i-1)
s和fib(i-2)的所有值
s它以前遇到过,直到返回到第一个fib(i-1)
。只有这样,它才能继续移动到第一个fib(i-2)
,并根据需要在那里输入if语句,然后输入这些1并将它们相加,以找到第一个返回的fib(i-1)+fib(i-2)
是。如果这只会让事情变得更混乱,我建议用箭头将它写出来,以显示正在采取的步骤,这样你就可以更清楚地知道自己在哪里,以及所有已经做的事情。这样做在我第一次学习斐波那契递归时帮了我的忙
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(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