问题

来自王道考研数据结构书籍,思维拓展

斐波那契数列有两种常用的算法:递归算法和非递归算法。试分别分析两种算法的时间复杂度。

递归方式

递归方式代码:
递归结束条件可以不同,如果数列从第一个开始且为1,那么就是如下结束条件。
如果从第0个开始且第0个为0,那么结束条件就会改变:n等于0时返回0,n等于1时返回1

#include <stdio.h>
#include <stdlib.h>int Fibonacci(int n){if(n==1||n==2)return 1;elsereturn Fibonacci(n-1)+Fibonacci(n-2);
} int main(int argc, char *argv[]) {int n;scanf("%d",&n);int result = Fibonacci(n);printf("%d",result);return 0;
}

时间复杂度可通过下图分析:

如果是一个满二叉树的话,其时间复杂度就是O(2^n)。但实际上并不是满二叉树,所以比这个要小一点。网上有确切的值以及推导过程,大家可以看看。

非递归方式

代码如下:

#include<stdio.h>
#include<stdlib.h>int Fibonacci(int n){if(n<=2){return 1;}else{int num1=1;int num2=1;int i;for(i=2;i<n;i++){num2=num1+num2;num1=num2-num1;}return num2;}
}int main(){int n;scanf("%d",&n);int result=Fibonacci(n);printf("%d",result);
}

直接看for循环即可,语句重复执行的次数是n的数量级,所以时间复杂度为O(n)。

斐波那契数列递归与非递归时间复杂度相关推荐

  1. 斐波那契数列递归算法和非递归算法以及其时间复杂度分析

    1.在学习数据结构这门课的过程中,发现斐波那契数列的递归算法以及非递归算法,以及其时间复杂度分析是一个小难点.所以特别总结一下. 斐波那契数列的表达式: Fibonacci数列简介: F(1)=1 F ...

  2. 计算斐波那契数列递归算法和非递归算法的比较

    对于斐波那契数列的计算是计算机算法经典问题,常见的算法有递归算法和非递归算法两种,那么它们之间的不同应该如何对比? 本文用python为例,比较两种不同算法的时间复杂度等不同 代码比较 递归算法: # ...

  3. ----斐波那契数列---eval函数----类递归思想 栈 进出 思想

    ------------ 斐波那契 数列 --------------- [1,1,2,3,5,8,13,21,34,...] 1 列表方法实现 # l=[1,1] # # # while len(l ...

  4. [剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]

    [问题描述][中等] 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N ...

  5. 递归——阶乘加斐波那契数列(简单掌握递归思想的敲门砖)

    话不多说,先上源码: 阶乘: #include<iostream> #include<bits/stdc++.h> using namespace std;int JieChe ...

  6. 递归法 最大公倍数 斐波那契数列 数组插入排序改递归

    辗转相除法: 例如:m%n=0;能够整除则n为最大公倍数 若m%n=k,不能够整除的话,继续辗转相除变为n%k 若n%k=c,不能整除的话继续这样- 核心代码 static int gcd(int m ...

  7. C++:斐波那契数列(迭代和递归)

    [问题引入] 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子 ...

  8. 斐波拉契数列的递推递归求解算法

    介绍: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数 ...

  9. 斐波那契数列递归算法与非递归算法

    斐波那契数列,又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列". 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, ...

  10. 斐波那契数列(Fibonacci)递归和非递归实现

    序列前9项为:0, 1, 1, 2, 3, 5, 8, 13, 21 要注意非递归的话就是那一个变量帮助存储当前下一项的值,然后依次挪动两个指针往下即可 注意如果n太大 会溢出  1     publ ...

最新文章

  1. c#值类型和引用类型
  2. 实例讲解sed的9种常见用法
  3. 服务端程序的初步实现
  4. 从银行网点拒绝普通客户 看互联网银行的“微众市场
  5. 拖拽元素自定义html模板,JS实现的自定义网页拖动类
  6. 输入某年某月某日,Java判断这一天是这一年的第几天?
  7. python从入门到放弃-《Python3从入门到放弃》视频教程
  8. AD19改变原理图图纸大小(A4改为A3
  9. 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
  10. mysql服务性能优化—my.cnf配置说明详解
  11. Java学习笔记 --- IDEA
  12. 大象英语-电脑键盘练习工具儿童版(学英语、学电脑)
  13. 《网页配色密码》 一本易读实用的好书
  14. fash 3D 游戏
  15. 第二层、三层、四层交换机原理
  16. 猴年猴赛雷,曙光服务器全面升级E5-v4平台
  17. 判断是手机还是平板html,“吃鸡”用平板好还是手机好?大神给出了答案,不同理解不同格局...
  18. 四舍五入VS银行家舍入 (四舍六入五取偶)
  19. 推荐系统与深度学习(一)——FM模型原理
  20. 对比语法错误、语义错误以及运行时错误

热门文章

  1. 销售宝:微信小程序为什么没有火?
  2. 北京内推 | 微软亚洲研究院数据知识智能组招聘大模型研究实习生
  3. php文件在线编码转换,php如何给文件转码
  4. 在山雨飘摇中,且停且走
  5. go reflect 3 rules
  6. 【iOS】熟悉Objective-C
  7. 计算机教师格言座右铭,适合教师的格言座右铭
  8. 【有利可图网】PS教程:PS设计打造海报中常见的中文特效艺术字
  9. qt4.8.6移植到海思3531
  10. 详细的网站定制步骤有哪些?