斐波那契数列的三种方法——Java版

本文介绍了斐波那契数列的定义及其由来的兔子繁殖故事,对比了递归、迭代和动态规划三种计算方法,强调了动态规划在提高效率方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍:

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
其规律很明显,从第3个数开始,每个数都等于它前两个数的和。

具体代码:

递归

递归法是最直观的方法,根据斐波那契数列的定义,可以通过递归的方式来计算。具体实现如下:

class Solution {
    public int fib(int n) {
   if(n==1||n==2){
       return 1;
   }
   if(n>2){
       return fib(n-1)+fib(n-2);

   }
   return 0;
    }
}

递归法的思路是将问题分解为更小的子问题,直到问题规模足够小,可以直接得到结果。但是递归法的效率较低,因为会重复计算相同的子问题。

迭代法

迭代法是通过循环来计算斐波那契数列,避免了重复计算。具体实现如下:

public static int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    int prev = 0;
    int curr = 1;
    for (int i = 2; i <= n; i++) {
        int temp = curr;
        curr = prev + curr;
        prev = temp;
    }
    return curr;
}

迭代法的思路是从前往后计算斐波那契数列的每一项,利用前两项的值来计算当前项的值。

动态规划

动态规划法是将问题分解为多个子问题,并保存子问题的解,避免重复计算。具体实现如下:

public static int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    int[] dp = new int[n + 1];
    dp[0] = 0;
    dp[1] = 1;
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[n];
}

动态规划法的思路是从前往后计算斐波那契数列的每一项,并保存每一项的值,以便后续使用。这样可以避免重复计算,提高效率。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.祝小码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值