古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

来源:互联网 发布:webmin nginx 编辑:程序博客网 时间:2024/05/01 20:04

根据高德纳(Donald Ervin Knuth)的《计算机程序设计艺术》(The Art of Computer Programming),1150年印度数学家Gopala和金月在研究箱子包装物件长宽刚好为1和2的可行方法数目时,首先描述这个数列。在西方,最先研究这个数列的人是比萨的列奥那多(意大利人斐波那契Leonardo Fibonacci),他描述兔子生长的数目时用上了这数列。

第一个月初有一对刚诞生的兔子
第二个月之后(第三个月初)它们可以生育
每月每对可生育的兔子会诞生下一对新兔子
兔子永不死去.

这里写图片描述

wiki : 斐波那契数列

public class Rabbit {    public static void main(String [] args){        long [] m ;        System.out.print("Please input month : ");        Scanner s = new Scanner(System.in);        int i = s.nextInt();        m = new long[i];        if(m.length >= 1){            m[0] = m[1] = 1;//第一和第二个月的兔子都是:1        }        for(int j = 0; j < m.length; j++){            if(j == 0 || j == 1){                System.out.println("Month : " + (j+1) + "\tRabbit number is : " + m[j]);            }else {                m[j] = m[j-2] + m[j-1];//第三个月以后都满足规律:m[j] = m[j-2] + m[j-1]                System.out.println("Month : " + (j+1) + "\tRabbit number is : " + m[j]);            }        }    }}

运行测试:

Please input month : 6Month : 1   Rabbit number is : 1Month : 2   Rabbit number is : 1Month : 3   Rabbit number is : 2Month : 4   Rabbit number is : 3Month : 5   Rabbit number is : 5Month : 6   Rabbit number is : 8
0 0