码迷,mamicode.com
首页 > 其他好文 > 详细

兔子生兔子问题(斐波那契数列)

时间:2019-12-05 18:39:18      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:system   main   返回值   nts   lin   turn   auto   ret   Stub   

一道经典的算法问题。

题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。假如兔子都不死,要求输出一年内兔子的数量是多少。

1 1 2 3 5 8……

代码如下:

//兔子问题(斐波那契)
package com.hxzy.homework;
 
public class HomeWork05 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int month = 12;
        int sum = fab(month);
        System.out.println(sum);
        System.out.println(fab_1(month));
    }
    static int fab(int month){
        if(month<=2)
            return 1;
        else if(month==3)
            return 2;
        else
            return 2*fab(month-1)-fab(month-3);
//          return fab(month-1) +(fab(month-1)-fab(month-2)) +(fab(month-2)-fab(month-3));
//          返回值为,上月兔子数+上月增加的兔子数+两个月前新增兔子数
    }
    static int fab_1(int n){
        if(n<=2return 1;
        else return fab_1(n-1)+ fab_1(n-2);
    }

用递归法求解最简单,上面代码fab()是根据题意写出的代码。由于兔子第三个月开始会生小兔子,所以此道题目的关键逻辑是:

本月兔子数=上月兔子数 + 上月增加的兔子数 + 两个月前新增兔子数,

即:fab(n) = fab(n-1) +(fab(n-1)-fab(n-2)) + (fab(n-2)-fab(n-3));

亦即:fab(n)=2*fab(n-1) - fab(n-3)

这一逻辑较斐波那契数列更好理解。

兔子生兔子问题(斐波那契数列)

标签:system   main   返回值   nts   lin   turn   auto   ret   Stub   

原文地址:https://www.cnblogs.com/coolyouguo/p/11990935.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!