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