递归求解兔子对数问题

来源:互联网 发布:关口知宏2017来中国 编辑:程序博客网 时间:2024/06/06 08:29
package org.westos_11;/** * 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?找规律:    兔子对数的规律:        第一个月:1        第二个月:1        第三个月:2        第四个月:3        第五个月:5        第六个月:8        .....        规律:            1)从第三个月开始:每个月兔子的对数等于前两个月之和            2)第一个月和第二个月数据是已知的把每个月相邻兔子对数数据当做:a,b第一个月和第二个月相邻的数据:a=1,b=1第二个月和第三个月相邻 的数据:a=1,b=2第三个月和第四个月相邻的数据:a=2,b=3第四个月和第五个月相邻的数据:a=3,b=5....下一次的a是上一次的b,下一次的b是上一次的a+b数组或者递归递归:    三个条件:            1)定义一个方法            2)必须有规律            3)要有出口条件            举例:                    从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:                        从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:                            从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:                                从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:                                    ....                                    庙塌了,挂了.. * @author Apple */public class DiGuiTest {    public static void main(String[] args) {        //定义一个数组:动态初始化        int[] arr = new int[20] ;        //第一个月和第二个月兔子对数都是已知的        arr[0] = 1 ;        arr[1] = 1 ;        //arr[2] = arr[0]+ arr[1] ;        //arr[3] = arr[1]+arr[2] ;        for(int x = 2 ; x < arr.length; x ++){            //计算出每一个月兔子对数的数据            arr[x]  = arr[x-1]+arr[x-2];        }        System.out.println("第二十个月兔子的对数是:"+arr[19]);//6765        System.out.println("----------------------");        System.out.println("第二十个月兔子的对数是:"+fib(20));//6765    }    /**     *      * @param n     *      n表示月份     * @return       *      返回值是兔子的对数     * 规律:     *      第一个月和第二个月兔子的对数1:从第三个月开始,每一个月兔子对数的数据是前两个月之和     */    private static int fib(int n) {        if(n==1 || n==2){//出口条件            return 1 ;        }else{            return fib(n-1) + fib(n-2) ;//中间的规律        }    }}
原创粉丝点击