public class Fibonacci {
// 方法一:利用数学递推式,直接递归
public int fib1(int n){
// 基准情况
if (n == 0) return 0;
if (n == 1) return 1;
// 递归调用
return fib1(n - 2) + fib1(n - 1);
}
// 方法二:动态规划
public int fib2(int n){
// 返回基准情况
if (n == 1 || n == 2) return 1;
// 定义一个状态数组,保存就是fib(n)的计算结果
int[] dp = new int[n];
dp[0] = dp[1] = 1; // fib(1)和fib(2)
// 状态转移递推
for (int i = 2; i < n; i++)
dp[i] = dp[i-2] + dp[i-1];
return dp[n-1];
}
// 方法三:动态规划空间优化
public int fib(int n){
if (n == 1 || n == 2) return 1;
// 定义两个临时遍历,保存前两个状态
int pre2 = 1, pre1 = 1; // fib(1)和fib(2)
for (int i = 2; i < n; i++){
// 定义一个临时变量,保存当前的状态
int curr = pre1 + pre2;
pre2 = pre1;
pre1 = curr;
}
return pre1;
}
public static void main(String[] args) {
Fibonacci fibonacci = new Fibonacci();
System.out.println(fibonacci.fib(9));
}
}