C·RX 2021-09-29 02:50 采纳率: 60%
浏览 52
已结题

java关于不死神兔子的繁殖理解(斐波那契数列--兔子繁殖)

第一次发贴求解,自学java,关于不死神兔代码的理解卡壳了,原理基本懂:f(n)=f(n-1)+f(n-2);
代码如下:

public class DiGui {
    
    public static void main(String[] args) {
        System.out.println(fib(4));
        
    }
    public static int fib(int n) {
        if(n == 1 || n == 2) {
            return 1;
        }else {
            int fib1,fib2,fib3;
            fib1=fib(n-1);
                        fib2=fib(n-2);
                        fib3=fib1+fib2;
            System.out.println("n="+n);
            System.out.println("n1:"+(n-1));
            System.out.println("n2:"+(n-2));
            System.out.println("fib1="+fib1+":"+"fib2="+fib2);
            System.out.println("fib3="+fib3);
            System.out.println("--------------------");
            return fib3;
        
        }
    }

}


运行的如果如下:

n=3
n1:2
n2:1
fib1=1:fib2=1
fib3=2
--------------------
n=4
n1:3
n2:2
fib1=2:fib2=1
fib3=3
--------------------
3

不理解的地方是:fib(n-1)和fib(n-2),输出的结果是:
fib1=fib(n-1); 当n=4时:fib1=2、当n=3时:fib1=1
fib2=fib(n-2); 当n=4时:fib2=1、当n=3时:fib2=1
请问该如何理解?

  • 写回答

1条回答 默认 最新

  • 关注

    这是递归调用。
    调用过程是,首先 System.out.println(fib(4));调用fib(4)
    在fib(4)中n=4,
    执行到 fib1=fib(n-1);时等于是调用fib(3)
    在fib(3)中n=3,
    又执行到 fib1=fib(n-1);时等于是调用fib(2)
    在fib(2)中 直接return 1;
    又回到在fib(3)中执行到 fib2=fib(n-2);时等于是调用fib(1)
    在fib(1)中也是直接return 1;
    又回到在fib(3)中继承执行 fib2=fib(n-2);之后的代码,输出:
    n=3
    n1:2
    n2:1
    fib1=1:fib2=1
    fib3=2


    等执行到return fib3;会回到fib(4)中又执行 fib2=fib(n-2);等于是又调用fib(2)一次。
    在fib(2)中return 1;
    又回到在fib(4)中继承执行 fib2=fib(n-2);之后的代码,输出:
    n=4
    n1:3
    n2:2
    fib1=2:fib2=1
    fib3=3


    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月7日
  • 已采纳回答 9月29日
  • 创建了问题 9月29日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度