1. 实现思路
1.1【递归法】: 递归"裂变"计算f值,计算次数较多
- 基本情况:k < 2, f(k) = k
- 递归收缩:k > 2, f(k) = f(k -1) + f(k - 2)
1.2【遍历法】:逐个储存+计算下一个f值
- k < 2, f(k) = k
- loop 逐个计算,算到k停止:k > 2, f(k) = f(k -1) + f(k - 2)
- 返回最后一个值
1.3 【数组法】:将计算过的f值储存在array里
- k < 2, f(k) = k
- 设置用于储存f的数组
- 初始化前两个f值
- 遍历:通过提取数组内前两个f值并求和,来得出后一个值,并储存到数组内。算到k停止
- 返回数组下标为k的值
2. 代码实现
public static int fibonacciByRecursion(int k) {
if (k < 2) {
return k;
}
return fibonacciByRecursion(k - 1) + fibonacciByRecursion(k - 2);
}
public static int fibonacciByLoop(int k) {
int f1 = 0;
int f2 = 1;
if (k < 2) {
return k;
}
for (int i = 2; i <= k; i++){
int temp = f2;
f2 = f1 + temp;
f1 = temp;
}
return f2;
}
public static int fibonacciByArray(int k) {
if (k < 2) {
return k;
}
int[] fibonacciArray = new int[k + 1];
fibonacciArray[0] = 0;
fibonacciArray[1] = 1;
for (int i = 2; i <= k; i++) {
fibonacciArray[i] = fibonacciArray[i - 1] + fibonacciArray[i - 2];
}
return fibonacciArray[k];
}