记录自已学习之斐波那契数列

来源:互联网 发布:数控机床的编程方法 编辑:程序博客网 时间:2024/06/09 19:24
其实斐波那契数列也是面试题的一样,有的公司会用这个作为考题。所以我在这里还是要说一下斐波那契数列。我记得有一道题目就是考斐波那契数列的,就是有一对兔子,隔三个月出生一对兔子,新兔子也要隔三个月才能生出兔子,这样的问题,问第九个月有多少对兔子?
所谓的斐波那契数列就是以第一二个数字为1,从第三个数字开始就是它前两个数字的和,也就是2。第四个数字就是第二个和第三个的和,也就是3。就是这样循环下去。数列就是这样:1 1 2 3 5 8 ......

我在这里介绍两种方法去写出这个斐波那契数列:

第一种就是递归的方法,不过这种方法比较不好,因为它很影响效率。每次递归下去都有两个分支,也就是一个稍微大一点的数就会有影响。

long func(int num)
{
if (num <= 2)
return 1;
return func(n -1) + func(n - 2);
}
这条式子就是说明了这个斐波那契数列的递归方式。if (num <= 2)这条语句就是递归的出口,当num<=2时就跳出递归。
也就是这条函数就是把所有的数开始赋值的。也就是从第一个数等于1开始,从后面数,两个1 1就是分别是第一个数和第二个数
2就是第三个数。这条式子确实是你把num设为第几个数就出第几个数。

第二种方法就是迭代的方法(辗转法):
long func(int num)
{
long temp, prev = 1, next = 1;//temp为临时变量
while (num)
{
temp = prev; //保存前一个值
prev = next; //保存后一个值,后一个值作为前一个值的数
next = temp + prev;//后一个值为前两个值得和
num--;
}
}
这个函数就是迭代方法了,我个人觉得这种方法比较好理解,是一种不断用变量的旧值递推新值的过程。但是这种方式前两个值就被显式地赋值long temp, prev = 1, next = 1;。所以这里的num是往后推两个值,也就是这里的num = 4等于递归的num = 6。希望大家能好好理解一下,我开始学的时候都理解的许久,因为递归实在是难以理解(除了一些高智商的同学),递归也最好画图理解一下,我个人还是比较建议画图理解,这样比较看得清晰。
0 0
原创粉丝点击