斐波那契数列的递归,迭代(循环),通项公式三种实现
2012-08-01 11:19
183 查看
Fibonacci数列是指这样一种数列,它的前两项均为1,从第三项开始各项均为前两项之和。用数学公式表示出来就是:
1 (n=1,2)
fib(n)=
fib(n-1)+fib(n-2) (n>2)
可以证明斐波那契数列的通项公式为fib(n) = [(1+√5)/2]^n /√5 - [(1-√5)/2]^n /√5 (n=1,2,3.....),关于斐波那契数列的详细介绍请参阅百度百科。
下面我将介绍三种比较常用的求解第n项斐波那契数列的方法:递归法、迭代法、通项公式法。
1、递归法
这种方法的优点是简洁和容易理解,缺点是时间复杂度太大,随着n的增大,运算时间将会急剧增加。因此在很多场合这种方法是不可取的。
使用这种方法的关键代码是:
2、迭代法
这种方法相对于递归法来说在时间复杂度上减小了不少,但代码相对就要复杂些了。它的思想是这样的,假设开始时f0=1,f1=1,currentFib表示当前斐波那契数,则:
这样迭代结束和currentFib就是fib(n)了。
3、通项公式法
这种方法是最没技术含量的方法,只要你知道通项公式照着把它翻译成编程语言就可以了,优点不言而喻。
fib(n) = pow(((1 + sqrt(5)) / 2.0),n) / sqrt(5) - pow(((1 - sqrt(5)) / 2.0),n) / sqrt(5));
小结:
这三种方法各有优缺点,使用哪种方法根据实际情况确定,从时间复杂度上来说O(通向公式法)<O(迭代法)<O(递归法)。
下面我做了一个简单的测试:分别测试这三种方法计算0-30这31个斐波那契数所用的总时间。从测试结果看,递归确实很费时,特别是n在30以后计算起来就很费时了,而另外两种方法计算这31个斐波那契数所费时间基本为0。当然结果不会很准确,但至少能说明问题。
1 (n=1,2)
fib(n)=
fib(n-1)+fib(n-2) (n>2)
可以证明斐波那契数列的通项公式为fib(n) = [(1+√5)/2]^n /√5 - [(1-√5)/2]^n /√5 (n=1,2,3.....),关于斐波那契数列的详细介绍请参阅百度百科。
下面我将介绍三种比较常用的求解第n项斐波那契数列的方法:递归法、迭代法、通项公式法。
1、递归法
这种方法的优点是简洁和容易理解,缺点是时间复杂度太大,随着n的增大,运算时间将会急剧增加。因此在很多场合这种方法是不可取的。
使用这种方法的关键代码是:
if(n == 1|| n== 2) { return 1; } else { return fib(n - 1) + fib(n - 2); }
2、迭代法
这种方法相对于递归法来说在时间复杂度上减小了不少,但代码相对就要复杂些了。它的思想是这样的,假设开始时f0=1,f1=1,currentFib表示当前斐波那契数,则:
for(i = 1;i < n;i++) { currentFib = f0 + f1; f0 = f1; f1 = currentFib; }
这样迭代结束和currentFib就是fib(n)了。
3、通项公式法
这种方法是最没技术含量的方法,只要你知道通项公式照着把它翻译成编程语言就可以了,优点不言而喻。
fib(n) = pow(((1 + sqrt(5)) / 2.0),n) / sqrt(5) - pow(((1 - sqrt(5)) / 2.0),n) / sqrt(5));
小结:
这三种方法各有优缺点,使用哪种方法根据实际情况确定,从时间复杂度上来说O(通向公式法)<O(迭代法)<O(递归法)。
下面我做了一个简单的测试:分别测试这三种方法计算0-30这31个斐波那契数所用的总时间。从测试结果看,递归确实很费时,特别是n在30以后计算起来就很费时了,而另外两种方法计算这31个斐波那契数所费时间基本为0。当然结果不会很准确,但至少能说明问题。
相关文章推荐
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 斐波那契数列的递归、迭代(循环)、通项公式三种实现
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 用递归,迭代,通项公式三种方法实现斐波那契数列求解
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 详解python使用递归、尾递归、循环三种方式实现斐波那契数列
- 斐波那契数列(Fibonacci sequence)Python实现的三种方案:列表 递归 生成器
- 斐波那契数列的递归和迭代实现之差异
- 【C语言】求取第n个斐波那契数的时间复杂度、空间复杂度分析,用三种方式实现(普通递归,循环,优化递归)
- 分别用的列表,递归,生成器三种方式创建出n个元素的斐波那契数列(Python3实现)
- php递归与迭代实现斐波那契数列
- 二叉树的三种遍历方式的循环和递归的实现方式
- 斐波那契数列的两种实现方式(递归(大于O(n方))和迭代(O(n))----网易笔试2013录
- 二叉树的三种遍历方式的递归实现和迭代实现
- 斐波那契数列的递归与循环的算法实现
- fibonacii数列(斐波那契数列)的递归实现及循环实现
- 递归和循环方式实现斐波那契数列