今天给大家带来一个经典题,斐波那契数列,题目如下:
//题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,
   //小兔子长到第三个月后每个月又生一对兔子。假如兔子都不死,要求根据输入的月份输出对应兔子的个数
   //解题思路: 月 份 :1   2  3  4  5  6  7   8   9
        //         兔子数 :1   1  2  3  5  8  13  21  34
        //  上方可以看出,是有规律可循的,第n个数 == n-1 + n-2;
        //共2种实现方式,首先展示第一种,利用数组实现
        Scanner sca = new Scanner(System.in);
        System.out.println("请输入您要查看的月数:");
        int month = sca.nextInt();
        int[] num = new int[month];
        //前两位是固定值,设置固定值
        num[0] = 1;
        num[1] = 1;
        for (int i = 2; i < num.length; i++) {
            num[i] = num[i-1] + num[i-2];
        }
        System.out.println(month + "月兔子共有:" + num[month-1] + "对");
        //第二种方式,利用递归实现,递归原理:假设输入的是5,从5开始依次往下走,再返回来,最后返回结果,类似于循环,但不是循环
        int num2 = fbnqRabbit(month);
        System.out.println("第" + month + "个月的兔子数:" + num2 + "只");
    }
    /**
     * 递归实现兔子生兔子(斐波那契数列)
     * @param month 输入的月份
     * @return 返回month对应的兔子对儿数
     */
    public static  int fbnqRabbit(int month) {
        //如果到了1或2直接返回1
        if (month == 1 || month == 2) {
            return  1;
        }
        //返回每次计算值,在本方法内完成,最后返回month月份对应的数
        return  fbnqRabbit(month - 1) + fbnqRabbit(month - 2);
    }递归实现会有一个问题,输入50以上的数字就不能输出结果了,就算能够输出,也是非常非常慢,使用递归实现该问题如果输入数字过大可能会导致栈内存溢出,为了解决这个问题,利用数组实现,也是不错的选择,数组实现的原理,也是先将数据复制到数组内,然后输入1000不是问题,测试通过。
制作不易,望各位多多支持!!????????










