看图轻松理解斐波那契数列

栏目: 编程工具 · 发布时间: 5年前

内容简介:推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。斐波那契(Leonardo Pisano ,Fibonacci, Leonardo Bigollo,1175年-1250年),又称列奥纳多,是中世纪意大利数学家。他是西方第一个研究斐波那契数列的人,并将现代书写数和乘数的位值表示法系统引入欧洲。主要作品包括《计算之书》、《几何实践》、《平方数书》等。斐波那契数列,又称黄金分

推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种 排序 等等几十篇的样子。

斐波那契

斐波那契(Leonardo Pisano ,Fibonacci, Leonardo Bigollo,1175年-1250年),又称列奥纳多,是中世纪意大利数学家。他是西方第一个研究斐波那契数列的人,并将现代书写数和乘数的位值表示法系统引入欧洲。主要作品包括《计算之书》、《几何实践》、《平方数书》等。

斐波那契数列

斐波那契数列,又称黄金分割数列或兔子数列,该数列为0、1、1、2、3、5、8、13、21、34、...,可以看到它的性质是前两项之和等于后一项。

兔子问题

斐波那契数列可以用来描述兔子繁殖问题,一般而言,兔子在出生两个月后就有繁殖能力,一对兔子每个月能生出一对小兔子。如果所有兔子都不死,那么一年后可以繁殖多少对兔子?实际结果如下,第一个月和第二个月,兔子还没有繁殖能力,所以都只有1对。第三个月生下第一对,总共有2对。第四个月老兔子继续生下一对,另一对还没有繁殖能力,总共有3对。以此类推,第五个月到第十二个月的兔子对数对应如下。

月数 1 2 3 4 5 6 7 8 9 10 11 12
对数 1 1 2 3 5 8 13 21 34 55 89 144

表达式

看图轻松理解斐波那契数列

递归实现

int fib(int n){
    if (n == 0)
       return 0;
    if (n == 1)
       return 1;
    return fib(n - 1) + fib(n - 2);
}
复制代码

假如n=4时,看看递归过程的堆栈情况。

① 调用fib函数,传入参数值4。

看图轻松理解斐波那契数列

② fib(4)=fib(3)+fib(2),需要继续调用fib(3),而fib(2)先不进入执行堆栈。

看图轻松理解斐波那契数列

③ fib(3)=fib(2)+fib(1),需要继续调用fib(2),fib(1)先不进入执行堆栈。

看图轻松理解斐波那契数列

④ fib(2)=fib(1)+fib(0),需要继续调用fib(1),fib(0)先不进入执行堆栈。

看图轻松理解斐波那契数列

⑤ fib(1)返回1,停止往下调用,然后上一步的fib(0)进入堆栈。

看图轻松理解斐波那契数列

fib(0)返回0,则 ④ 中的fib(2)=fib(1)+fib(0)=1

看图轻松理解斐波那契数列
看图轻松理解斐波那契数列

然后,堆栈回到③中,因为fib(3)=fib(2)+fib(1),所以将fib(1)入栈。

看图轻松理解斐波那契数列

fib(1)返回1,则 ③ 中的fib(3)=fib(2)+fib(1)=1+1=2。

看图轻松理解斐波那契数列
看图轻松理解斐波那契数列

然后,堆栈回到 ② 中,因为fib(4)=fib(3)+fib(2),所以将fib(2)入栈。而fib(2)=fib(1)+fib(0),于是将fib(1)入栈。此时fib(1)直接返回1,然后继续将fib(0)入栈。则fib(2)=fib(1)+fib(0)=1,最后fib(4)=fib(3)+fib(2)=3。

看图轻松理解斐波那契数列
看图轻松理解斐波那契数列
看图轻松理解斐波那契数列
看图轻松理解斐波那契数列
看图轻松理解斐波那契数列
看图轻松理解斐波那契数列

-------------推荐阅读------------

我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、 mysql 协议、chatbot)

为什么写《Tomcat内核设计剖析》

2018汇总数据结构算法篇

2018汇总机器学习篇

2018汇总 Java 深度篇

2018汇总自然语言处理篇

2018汇总深度学习篇

2018汇总JDK源码篇

2018汇总Java并发核心篇

2018汇总读书篇

跟我交流,向我提问:

看图轻松理解斐波那契数列

欢迎关注:

看图轻松理解斐波那契数列

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Thinking Recursively

Thinking Recursively

Eric S. Roberts / Wiley / 1986-1-17 / USD 85.67

The process of solving large problems by breaking them down into smaller, more simple problems that have identical forms. Thinking Recursively: A small text to solve large problems. Concentrating on t......一起来看看 《Thinking Recursively》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具