剑指Offer_编程题——斐波那契数列

题目描述:

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

具体要求:

时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++32M,其他语言64M

具体思路:

概念介绍

斐波那契数列是一个很经典的问题,大多学计算机的都知道,它是由著名数学家列昂纳多·斐波那契而命名的。它也称之为黄金分割数列。它的由来是从兔子的繁殖而引进来的,因此也称之为“兔子数列”。从第三项起,前两项之和即为第三项,其通项为F(n) = F(n - 1)+ F(n - 2).例如:这样的一个数列:1 1 2 3 5 8 13 21 34……就是斐波那契数列。

实现思路

实现斐波那契数列需要进行经典的算法——递归。但是递归也是有技巧,如果我们只是单纯的进行递归,不进行任何的优化,则时间和空间复杂度为指数级别的,随着n的不断增长,时间的消耗和空间呈爆炸型增长。因此即使我们用递归也要对通项进行优化。其实在计算过程中,我们不难发现,前两项这和为第三项,之所以直接递归有那么大的复杂度,是因为它每计算新的一项,总会重复计算前一项,因此,我们只需要定义一个新的变量来保存这个之前计算好的值,时间和空间复杂度就降下来了。

我们分别用java和python来实现这个思路。

1、我们首先用java来实现这个代码

public 

代码效果图如图所示:

2、我们用Python来实现

class 

其效果图如图所示:

我们可以通过改善一下以上的代码,适当的缩减代码的运行时间复杂度,当然,空间就比之前的要占用多了,这就是典型的“以空间换时间”的思想。具体改进代码如下:

class 

其效果图如图所示:

与上面的代码相比较,只是优化了一行代码,时间复杂度确降低了接近一半,当然与之对应的空间就扩大了将近一倍。

总结

本道题通过一个典型的斐波那契数列问题来考察我们对递归的应用,因此在做该题之前,我们应该了解斐波那契数列,其次要熟练掌握递归思想。在最后我们运用了常见的“以空间换时间”的思想来改进了算法,其效果很明显。继续加油,争取早日找到工作,Good Luck!!!

c语言斐波那契数列_Day 7:斐波那契数列相关推荐

  1. c++调用cplex求解例子_递归算法的R语言实现 (罗汉塔、九连环、斐波那契数列等问题的求解)...

    递归算法用函数来实现,通俗地说就是函数对自身的调用,求解递归问题就转化为函数的调用关系问题.函数f(n)随自变量n的增加而变化,函数的调用关系也就表现为f(n)与f(n-1)或f(n-2)关系的问题. ...

  2. c语言输出斐波那契数列pta,从斐波那契数列说起

    这段时间在看算法相关的一些东西: 因为算法不好连笔试都过不了(哭,其实算法不仅仅是为了笔试面试,更是为了日后在工作中提高软件的运行效率.这让我联想到了前不久看过的一篇文章:李开复:算法的力量 以前没有 ...

  3. C语言递归算法求斐波那契,递归法求斐波那契数列(C语言版)

    斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法定义 ...

  4. python查询斐波那契数列通项公式_斐波那契数列求解总结(Python版)

    最近在查阅斐波那契数列时,看到下面的文章,总结得非常好,于是自己上手使用 Python 练习并实现多种求解方法 守望:面试官问你斐波那契数列的时候不要高兴得太早​zhuanlan.zhihu.com ...

  5. JAVA中打印斐波拉契数列_java打印斐波那契数列

    每行 5 个,输出斐波那契数列的前 20 个数字 6. 编写程序接受用户输入一个... 3 ? 这一公式输出斐波那契数列中的前 40 个数. 保存文件名为:bnds11.java class bnds ...

  6. C语言DP备忘计算指数N的斐波那契级数的算法(附完整源码)

    C语言DP备忘计算指数N的斐波那契级数的算法 C语言DP备忘计算指数N的斐波那契级数的算法完整源码(定义,实现,main函数测试) C语言DP备忘计算指数N的斐波那契级数的算法完整源码(定义,实现,m ...

  7. python查询斐波那契数列通项公式_分享一个神奇的操作系统——斐波那契+MACD,每一波都有20%以上的收益!...

    斐波那契数列,又称兔子数列,或者黄金分割数列.指的是这样一个数列: 0.1.1.2.3.5.8.13.21--从第三项起,它的每一项都等于前两项的和. 为什么是兔子数列?我们假设兔子在出生两个月后,就 ...

  8. python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...

    python斐波那契数列,本文是关于Python编程练习题和答案实例六,斐波那契数列应用的示例.引用百度关于斐波那契数列的介绍,大家先简单来的了解下,什么是斐波那契数列? 斐波那契数列(Fibonac ...

  9. 波菲那契数列公式_斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?...

    一句话先回答问题:因为斐波那契数列在数学和生活以及自然界中都非常有用. 下面我就尽我所能,讲述一下斐波那契数列. 一.起源和定义 斐波那契数列最早被提出是印度数学家Gopala,他在研究箱子包装物件长 ...

  10. 著名数列及其算法(斐波拉契)

    1.斐波那契数列 2.帕多瓦数列 3.卡特兰数 4.Look-and-say 数列 5.递推数列 – – 1.斐波那契数列 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而 ...

最新文章

  1. ubuntu14.04 升级gcc的方法
  2. 听说你想去大厂看学妹,带你看看作业帮产品经理岗面经
  3. 开发函数计算的正确姿势——运行 Selenium Java
  4. 戴尔服务器装新硬盘模式,DELL服务器配置RAID及安装ESXI
  5. suse 内核编译安装_升级SUSE Linux内核的完整步骤!
  6. POM.xml红叉解决方法
  7. 关于字符串截取的函数
  8. JavaScript比较两个数组的内容是否相同
  9. 首提“智能X效应”,英特尔携手产业加速智能变革
  10. sql---如何把sql查询出来的结果当做另一个sql的条件查询,1、语句2、with as
  11. 《C#图解教程》读书笔记之五:委托和事件
  12. 华三交换机配置access命令_H3C交换机配置命令大全讲解
  13. 小白软件帮手(xbrjbs)一个专业安装破解软件的公众号
  14. IP地址与DNS的作用,什么是IP地址与DNS【详细】
  15. xheditor编辑器的使用
  16. 如果我恨一个人,我就领他到中关村买相机。
  17. Delayed Adversarial Training with Non-Sequential Adversarial Epochs
  18. 乐理基础-和弦、调式
  19. UKF-MATLAB实现
  20. openEuler操作系统的安装

热门文章

  1. Android 车载应用开发与分析(12) - SystemUI (一)
  2. js中int转byte(-128—127)
  3. matlab案例 光学,利用Matlab 仿真光学实验
  4. vue——菜鸟教程学习
  5. 2分钟学会小程序中使用vant组件库
  6. HTML+CSS网页设计视频教程
  7. java 数组和集合的区别
  8. 利用matlab进行图片的二值化处理
  9. Unity3D 常用快捷键
  10. 京瓷1125打印机清零_京瓷1125驱动下载