介绍:
斐波那契数列(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];
}
动态规划法的思路是从前往后计算斐波那契数列的每一项,并保存每一项的值,以便后续使用。这样可以避免重复计算,提高效率。