Java不死神兔

不死神图的原理即代码实现

原题

有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?

原理

我们假设初始定义为1对兔子的话,那么在前2个月我们就会发现兔子时没有发生变化的,也就是前两个月均为1只兔子,在第三个月时我们的兔子就会生下另一只兔子,也就是说我们在之后每一次都需要加上上一个月所有的兔子,就是简单可以理解成每一个月即前两个月的兔子之和。比如我们第5个月的兔子总数来说,三月份生下的兔子在这个月开始生育,生育数即三月兔子的数量,四月的兔子数并不是生育下来的兔子,因此5月兔子的总数即生育数加上4月兔子总数。这样我们就可以解释成为斐波那契数列,用它的方法来解决了。下面是它的原理图。
图1

代码

方法一(数组的方法)

    public static void main(String[] args) {
        int arr[]=new int[20];
        arr[0]=1;//第一个月和第二个月不生育,即初始的一只
        arr[1]=1;
        for(int i=2;i<=12;i++){//这里从2开始,因为第一个月和第二月一已定义
            arr[i]=arr[i-1]+arr[i-2];
        }
//        System.out.println("第1个月为1只;");
//        System.out.println("第2个月为1只;");
        for(int a=1;a<=12;a++){
            System.out.println("第"+a+"个月为"+arr[a-1]+"只;");
//            System.out.println(arr[a]);
        }
    }

方法二 (递归的方法)

    public static int fei(int n) {//在调用方法时输入你需要的月数就可以了比如fei(20);
        if (n == 1 || n == 2) {
            return 1;
        } else {
            return fib(n - 1) + fei(n - 2);
        }
    }
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值