Fork me on GitHub

递归-斐波那契&兔子

斐波那契数列

斐波那契数列的排列是:0,1,1,2,3,5,8,13,21,34,55,89,144……依次类推下去。

观察后发现,它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数。

递归思想:一个数等于前两个数的和。

package com.autumn;

/**
 * 斐波那契数列的排列
 * 0,1,1,2,3,5,8,13,21,34,55,89,144
 * 后一个数等于前面两个数的和
 */
public class Recursive {

    public static void main(String[] args) {
        for (int i= 0;i<30;i++){
            System.out.println(fib(i));
        }
    }

    /**
     * 斐波那契竖列返回的值
     * @param index 下标,从0开始
     * @return 下标对应的值
     */
    public static int fib(int index){
        /*如果下标是0,返回0*/
        if (index == 0){
            return 0;
        }
        /*如果下标是1,返回1*/
        if (index ==1){
            return 1;
        }
        //否则,返回前两项的和
        return fib(index-1)+fib(index-2);
    }
}

兔子问题

兔子问题:最初有1对兔子,三个月之后,每个月都会生产一对兔子(前提,兔子不会死),那么第n个月之后一共有多少对兔子

package com.autumn;

/**
 * 生兔子
 * 有一对兔子,生长三个月后。开始生第一对兔子,并且以后每月生一对兔子,小兔子生长三个月后,也开始生兔子,问N个月后兔子的总数量
 * 月份对应的兔子数: 1,1,2,3,5,8
 * 可以看出兔子第三个月才能生一对,也就是说第三个月兔子数 = 第二个月现有兔子的总数 + 第一个月能生的兔子数(即将出生数=能生数)
 * 递归的方式:
 * (1)规律:每个月兔子的总数是前两个月兔子总数之和
 * (2)出口:前两个月都是一对
 */
public class Recursive {

    public static void main(String[] args) {
        for (int i= 1;i<30;i++){
            System.out.println(rabbit(i));
        }
    }

    /**
     * 当月兔子总数
     * @param index 月份,从1开始
     * @return 兔子的值
     */
    public static int rabbit(int index){
        /*如果月份是1,返回1*/
        if (index == 1){
            return 1;
        }
        /*如果月份是2,返回1*/
        if (index ==2){
            return 1;
        }
        //否则,返回前两项的和
        return rabbit(index-1)+ rabbit(index-2);
    }
}

 

posted @ 2020-01-02 13:03  秋夜雨巷  阅读(793)  评论(0编辑  收藏  举报