兔子生兔子之递归问题(递归实现斐波那契数列)

简介: 兔子生兔子之递归问题(递归实现斐波那契数列)

今天给大家带来一个经典题,斐波那契数列,题目如下:

   //题目:有一对兔子,从出生后第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不是问题,测试通过。

制作不易,望各位多多支持!!🤞💕

相关文章
|
算法 Java
【递归与回溯算法】汉诺塔与八皇后问题详解
文章目录 1 汉诺塔问题 1.1 汉诺塔问题概述 1.2 思路分析 1.3 代码实现(Java) 1.4 结果验证 2 八皇后问题 2.1 八皇后问题概述 2.2 思路分析 2.2.1 问题划分与分析 2.2.2 涉及到的数据结构分析 2.2.3 上下对角线与行列的关系 2.3 代码实现(Java) 2.4 结果验证
【递归与回溯算法】汉诺塔与八皇后问题详解
|
机器学习/深度学习 算法
蓝桥杯:递推算法 递归算法 例题:斐波纳契数列
蓝桥杯:递推算法 递归算法 例题:斐波纳契数列
105 0
|
C# 机器学习/深度学习
C#中八皇后问题的递归解法——N皇后
百度测试部2015年10月份的面试题之——八皇后。 八皇后问题的介绍在此。以下是用递归思想实现八皇后-N皇后。 代码如下: using System;using System.Collections.
1208 0
|
算法
趣味算法-神奇的兔子数列
趣味算法-神奇的兔子数列
82 0
|
机器学习/深度学习
递归实现 八皇后问题(*)
递归实现 八皇后问题(*)
155 0
递归实现 八皇后问题(*)
|
机器学习/深度学习 算法
【递归与递推 4】AcWing95. 费解的开关 、AcWing 93. 递归实现组合型枚举、AcWing 1209. 带分数、AcWing 1208. 翻硬币
【递归与递推 4】AcWing95. 费解的开关 、AcWing 93. 递归实现组合型枚举、AcWing 1209. 带分数、AcWing 1208. 翻硬币
183 0
|
JavaScript 算法 前端开发
蓝桥杯:桶排序 与 例题:算式问题
蓝桥杯:桶排序 与 例题:算式问题
110 0
|
机器学习/深度学习 人工智能 算法
『递归』汉诺塔和全排列
使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下: 第1步:1号盘从A柱移至B柱第2步:2号盘从A柱移至C柱
237 0