int fibonacci_1 (int i) {
if (i <= 0) return 0;
if (i == 1) return 1;
return fibonacci_1(i - 1) + fibonacci_1(i - 2);
}
int fibonacci_2(int first, int second, int n) {
if (n <= 0) return 0;
if (n < 3) return 1;
else if (n == 3) {
return first + second;
}
else {
return fibonacci_2(second, first + second, n - 1);
}
}
第一种算法是经典的递归方法,空间、时间复杂度为O(n^2)
第二种算法是改良后的算法,用first和second分别记录当前相加的两个数值,当n等于3时即为目标结果,时间复杂度为O(n),而空间复杂度为常数级别。