斐波那契数列之递归
用递归实现斐波那契数列的复杂度分析:
时间复杂度:O(2n)。在递归计算过程中,会产生大量的重复计算。例如,计算 F(n) 时需要计算
F(n−1) 和 F(n−2),而计算 F(n−1) 时又会计算 F(n−2),以此类推,形成了一个指数级的递归树,
节点数随着 n 的增大呈指数级增长。
空间复杂度:O(n)。递归调用会使用系统栈空间,递归的深度最大为 n,所以空间复杂度为 O(n)。
详细解释可以参考视频:https://www.bilibili.com/video/BV1JrWoe1EhW?t=82.5
1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 using namespace std; 5 6 7 8 // 用递归的方式来求斐波那契数列 9 int Fibonacci1(int n) { 10 if (n == 0) { 11 return 0; 12 } else if (n == 1) { 13 return 1; 14 } else { 15 return Fibonacci1(n - 2) + Fibonacci1(n - 1); 16 } 17 } 18 19 vector<int> FibonacciArray(int m) { 20 vector<int> result; 21 int k = 0; 22 int currentFib = Fibonacci1(k); 23 while (currentFib <= m) { 24 result.push_back(currentFib); 25 k++; 26 currentFib = Fibonacci1(k); 27 } 28 return result; 29 } 30 31 int main() { 32 int n = 1e8; 33 34 // printf("请输入数n(n>=0):"); 35 // scanf("%d", &n); 36 37 double beginTime = clock(); 38 printf("小于等于%d的斐波那契数列是:", n); 39 for (int num : FibonacciArray(n)) { 40 cout << num << " "; 41 } 42 double endTime = clock(); 43 printf("\ntime=%.0lfms", endTime - beginTime); 44 45 return 0; 46 }
浙公网安备 33010602011771号