斐波那契数列的四种实现方式
来源:互联网 发布:淘宝店代销怎么样 编辑:程序博客网 时间:2024/04/29 08:38
首先来介绍一下斐波那契数列:
斐波那契数列(Fibonacci sequence),又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
从定义可以看出斐波那契数列就是第一二项都是1,从第三项开始,每一项为前两项之和。那么要想知道每一项,只要知道前两项就可以得到了,前两项怎么得到?根据这同一种套路,直到前两项分别为第一二项(都是1),所有的不就都解决了。既然这样,很容易的就想到可以利用递归的方式去实现它了。
方法一:递归实现
这种方式虽然可以实现,而且代码也是很简单,但是很遗憾的是,它有一个很大的缺陷。就以求第5项为例子来分析一下:
通过上图可以看到,当求F(5)时,需要递归调用很多次,关键是其中有时候做的事情还是完全一样的,比如F(3)求了两次。当求得不是第5项而是更大的项,那么重复的会更多。我们都知道调用函数的开销是很大的,而该种方法就是在不断地调用同一个函数还做着许多无用功,它的时间复杂度高达O(2^n),可见它的效率是很低的。
方法1是由需要求的那一项倒着会去求,然后在依次返回,从而导致做了很多无用功,那么,如果从第一项开始,从前依次往后求,直到将需要求的那项求出来,这样就不会有重复求某一项的事情发生了,效率相对也就高一些了。
方法二:递归进阶版
这种方法相对方法1来说,其时间复杂度为O(N),空间复杂度为O(1),效率稍微要高一点,但可能不太好理解。可以将它的调用过程画出来帮助理解。
既然可以使用递归,那么毫无疑问,也是可以使用循环来实现的。
方法三:
这种方法的时间复杂度为O(N),空间复杂度为O(1),很简单,在这里就不多做解释了。
方法四:
利用数组将斐波那契数列的元素存起来,一般用于求斐波那契数列的前N项
方法四的时间复杂度为O(N),空间复杂度为O(1),是一种效率比较高的方法。
关于斐波那契数列就讲到这里,欢迎大家提出表柜意见哦~
- 斐波那契数列的四种实现方式
- 斐波那契数列的四种简单实现方式
- 斐波那契数列的四种实现
- 斐波那契数列的两种实现方式
- 斐波那契数列的三种实现方式
- C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列
- python用迭代器的方式实现斐波那契数列
- 7种方式实现斐波那契数列
- 六种方式实现斐波那契数列
- 7种方式实现斐波那契数列
- 斐波那契数列三种实现方式
- Java实现斐波那契数列的四种算法
- php实现斐波那契数列的几种方式以及杨辉三角
- 斐波那契数列的实现
- 斐波那契数列的实现
- 斐波那契数列的实现
- 递归方式、迭代方式实现的斐波那契数列。
- 递归和循环方式实现斐波那契数列
- codeforces 1A Theatre Square
- 通讯协议MavLink详解
- 大型网站在架构上应当考虑哪些问题?
- Java 面试必会知识点:Java 多线程与并发编程
- 揭秘前端工程师未来就业方向,年薪50w不是梦!
- 斐波那契数列的四种实现方式
- 设备文件 /dev
- 单片机文件系统的学习
- @controller 和@RestController 几个问题
- 《七点三刻》016期 幼儿园怎么了?/埃及一清真寺爆炸 二百余人死亡…2017年11月25日星期六
- Android Studio 完美引用 so、arr、jar 包
- Week01_day02
- 【ECS】云服务的基本操作:实例管理
- C++实现软件自动更新功能