斐波那契数列之递归

用递归实现斐波那契数列的复杂度分析:
时间复杂度: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 }
斐波那契数列之递归

 

posted @ 2025-03-02 16:29  SIPnnnnn  阅读(265)  评论(0)    收藏  举报