递归斐波那契数列的时间复杂度相对于循环等函数而言并不容易看出来,下面通过斐波那契数列的程序进行图解:

long long Fib(size_t N)
{if (N < 3)return 1;return Fib(N - 1) + Fib(N - 2);
}
int main()
{printf("%lld\n", Fib(30));return 0;
}

下图为图解递归的斐波那契数列。


20+21+22+23+...+2N−2=2N−1−1;2^0+2^1+2^2+2^3+...+2^{N-2} = 2^{N-1}-1; 20+21+22+23+...+2N−2=2N−1−1;
由此可知,用递归函数编写斐波那契数列,每次调用的次数总结就是等比数列(上图红色字体),总的调用次数结果是2^(N-1)-1,估算后斐波那契数列的时间复杂度相当于2^N

上图所示,通过分析输入斐波那契数N的时间复杂度,递归斐波那契数列具有理论价值,但没有工程应用价值;因而,不建议使用递归的方式编写较大的斐波那契数列。

递归的斐波那契数列的空间复杂度是O(N)Fib(N-1)一路沿Fib(2)返回后消毁栈帧,调用Fib(N-2)并建立栈帧后,实际上 Fib(N-2)Fib(N-1)用的是同一块栈帧空间。这是由于时间是累积的,而空间是可以重复利用的。

【数据结构】递归斐波那契数列的时间复杂度、空间复杂度相关推荐

  1. python函数递归 斐波那契数列

    4.7 python函数递归 斐波那契数列 代码:(利用递归.format输出等) def fibonacci(n):if n==1 or n==2:f=1else:f=fibonacci(n-1)+ ...

  2. Java实现递归 斐波那契数列 阶乘

    Java实现递归 斐波那契数列 阶乘 阶乘 /*** 使用递归算法求阶乘* 求阶乘 * 5!=5*4*3*2*1; * * 1=1;* 2!=2*1!;* 3! = 3*2!;* 4! = 4*3!; ...

  3. 斐波那契递归调用次数_递归求解斐波那契数列的时间复杂度——几种简洁证明...

    TL:DR: 暴力递归求解斐波那契数列的时间复杂度的紧界不是 ,而是 . 本文将给出几个简洁证明 用最暴力的方法求解斐波那契数列,时间复杂度是多少?具体地说,就是求下面这个程序的复杂度: def fi ...

  4. C语言递归:斐波那契数列

    斐波那契数列指的是这样一个数列:1,1,2,3,5,8, 13, 21, 34, 55, 89, 144, ... 原理: 通过观察我们发现,从第三个数开始,每一个数等于前两个数之和. 递归求斐波那契 ...

  5. 递归——斐波那契数列

    斐波那契数列 1.问题描述 斐波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数的和.给出了一个正整数a,要求输出斐波那契数列中第a个数. 2.输入数据 第一行是测试 ...

  6. python-循环递归斐波那契数列

    1. 循环实现斐波那契数列 输入n,输出前n个斐波那契数列: n = int(input())first = 0 second = 1 third = 1for i in range(0,n):pri ...

  7. C++递归斐波那契数列

    第一种 //斐波那契数列 // 0 1 1 - //从第1个开始 代码 #include<iostream> #include<cmath> using namespace s ...

  8. 斐波那契数列的时间复杂度

    int f(int n) {if (n == 1) return 1;if (n == 2) return 2;return f(n-1) + f(n-2); } 这样一段代码的时间复杂度是多少呢?你 ...

  9. 经典递归——斐波那契数列,汉诺塔

    斐波那契 汉诺塔 0 1 1 2 3 5 8 13 21 int fibonacci(int a){if(a==0)return 0;else if(a==1)return 1;elsereturn ...

最新文章

  1. java 取pdf表格内容数据_Java 在PDF中添加表格
  2. 平台战初现 产品从单个智能走向互联
  3. 2018南京java工资_2018年Java开发工程师的待遇如何?
  4. css 设置背景图片模糊,内容不模糊
  5. 开源ETL软件在智能化集成系统中的应用
  6. php 对接 北向数据接口 socket
  7. 某角数卡发卡网程序V1.7.1版本开源源码
  8. Disabling contextual LOB creation as createClob()
  9. 计算机设备 运维,计算机网络设备运维报告
  10. ssis oracle配置,[SSIS][Oracle]安裝 Oracle Driver 提供 SSIS 使用
  11. linux搭建天地伟业easy7,天地伟业easy7客户端
  12. Oracle 锁表查询语句及解锁
  13. 三极管三种基本放大电路
  14. 20行代码教你用python给证件照换底色
  15. uni-app关于tabBar配置
  16. VXE-TABLE V4 表格表尾合并
  17. MS VC6 链接错误处理
  18. 手机安装Linus系统
  19. 用户体验五要素_新零售「盒马」的用户体验设计5要素
  20. 商业银行金融IC卡国密改造安全建设方案

热门文章

  1. EJB初探(二)为什么需要EJB
  2. java 姓名_java 随机生成中文姓名人名
  3. mysql删库命令是啥_删除数据库的命令是什么
  4. html 如何设置选择图片,html中如何设置默认图片?
  5. BX9054: 各浏览器对 document.execCommand 方法的首参数可选值范围存在差异
  6. 使用Excle做数据分析与时间序列季节指数预测
  7. 2021年中国吉他和低音放大器市场趋势报告、技术动态创新及2027年市场预测
  8. 2022-2027年中国煤矿安全设备行业市场全景评估及发展战略研究报告
  9. C语言代码行数分类统计小程序(源代码)
  10. 用SQL语句进行数据分页查询