斐波那契数列(不死神兔问题) Java代码三种方法实现

标题:斐波那契数列(不死神兔问题) Java代码三种方法实现

斐波那契数列又称 黄金分割 数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“ 兔子数列 ”:

  • 指的是这样一个数列:1、1、2、3、5、8、13、21、34、……以此类推
  • 其规律是从第3个数开始,每个数都等于它前两个数的和。

Java代码实现如下:

方法一

编写递归算法程序:一列数的规则如下: 1、1、2、3、5、8、13、21、34… 求数列的第40位数是多少。

/*编写递归算法程序:不死神兔 数的规则如下: 1、1、2、3、5、8、13、21、34...... 求数列的第40位数是多少。*/
public class TestRabbit01 {
    //封装方法:递归计算方法  自己调用自己
    //下面为方法,public static是成员方法修饰符 int是返回值类型是整数型变量 result是方法名 形参是n
    public static int result(int n) {
        if (n <= 0) {//当n不大于0时候 返回0  要求必须是大于0的月份
            return 0;
        } else if (n == 1 || n == 2) {//当月份是1和2时候都返回1
            return 1;
        } else {
            return result(n - 1) + result(n - 2);//从第三个月开始,它的值等于它前面两个值相加的结果
        }
    }
    //main方法测试
    public static void main(String[] args) {
        System.out.println(result(40));//打印结果102334155
    }
  }

方法二:循环方法实现

public class TestRabbit01 {
    //封装方法:   
    //方法二 使用临时变量加for循环办法
    public static void res(int n){
        int a = 1;//存放前两个数的值
        int b = 1;
        int c = 0;//定义临时变量c
        if(n<= 0){
            System.out.println("请输入正整数月份...");
        }else if(n == 1 || n == 2){
            System.out.println("第"+n+"个月份的兔子数量是1个");
        }else{
            for (int i = 1; i <= n-2; i++) {
                c = a + b;//从第三个数开始,是前两个数的和
                a = b;//更新第一个数的值
                b = c;//更新第二个数的值
            }
            System.out.println("第"+n+"个月份的兔子数量是"+c+"个");
        }
    }
   
    //main方法测试
    public static void main(String[] args) {
        res(40);
    }
}

方法三 数组+循环方法实现

public class TestRabbit01 {
    //封装方法:
    //方法三 使用数组加for循环
    public static void  res3(int n){
        int[] arr = new int[n];//声明数组长度
        arr[0] = arr[1] = 1;//动态初始化
        for (int i = 2; i < arr.length; i++) {
            arr[i] = arr[i-1]+arr[i-2];
        }
        System.out.println("第"+n+"个月份的兔子数量是"+arr[n-1]+"个");
    }

    //main方法测试
    public static void main(String[] args) {
        res3(3);//2
        res3(40);//打印结果102334155
    }
}

这道不死神兔题的实质就是斐波那契数列: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
现在从递归.临时变量.普通数组三个角度出发思考逻辑,当然还有其它的方法(比如动态数组ArrayList…),同一道题用各种不同的思路去思考解决,也是对知识综合运用的锻炼吧。
希望对大家有帮助,也欢迎大家多多交流,谢谢

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值