算法初级_Question5_兔子产子问题(java实现)

这篇文章讲述的是算法初级部分的兔子产子问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

有一对兔子,从出生后的第三个月起每个月都生一对兔子,小兔子出生的第三个月又生出一对兔子,以此类推,假设所有兔子都不死,问三个月内每个月有多少只兔子。

算法分析

月数 小兔子 中兔子 老兔子 兔子总数(单位:对)
1 1 0 0 1
2 0 1 0 1
3 1 0 1 2
4 1 1 1 3
5 1 1 3 5
6 3 1 4 8
7 4 3 5 13

找到规律:从第三个月起,本月兔子总数为前两个月的总数之和(斐波那契数列)
1. f(n) = f(n-1) + f(n-2),n>2
2. 1 ,n<=2

代码实现

public static void main(String[] args) {

            for(int n=1 ; n<=30 ; n++){
                System.out.printf("%-10d" , fibonacci(n));
                if(n%4 == 0)
                    System.out.println();
            }
    }
    /**
     * 求第n个斐波那契数
     */
    private static int fibonacci(int n){
        if(n<=2)
            return 1 ;
        else
            return fibonacci(n-1) + fibonacci(n-2);
    }

样例输出

1         1         2         3         
5         8         13        21        
34        55        89        144       
233       377       610       987       
1597      2584      4181      6765      
10946     17711     28657     46368     
75025     121393    196418    317811    
514229    832040    

你可能感兴趣的:(算法)