非递归实现斐波拉契函数

Posted 每天学习一点点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非递归实现斐波拉契函数相关的知识,希望对你有一定的参考价值。

以下用递归和非递归实现斐波拉契函数,查看两种方法需要的时间。

# -*- coding:utf-8 -*-
import datetime
class Solution:
    ‘‘‘
    要想非递归实现斐波拉契函数,只要保存f(n-2)、f(n-1)就可以,将其存入list中。
    当n=2时,只需要把list中的两个数相加一次即可,同时将相加的数存入list[1],将
    原来的list[1]存入list[0]中。
    ‘‘‘
    def __init__(self):
        self.list=[0,1]

    def Fibonacci(self, n):
        if n==0:
            return 0
        elif n==1:
            return 1
        else:
            n-=1
            while n:
                temp=self.list[1]
                self.list[1] = self.list[0] + self.list[1]
                self.list[0]=temp
                n-=1
            return self.list[1]

class Solution_digui:

    def Fibonacci(self, n):
        if n==0:
            return 0
        elif n==1:
            return 1
        else:
            return self.Fibonacci(n-2)+self.Fibonacci(n-1)

i=datetime.datetime.now()
print Solution().Fibonacci(39)
j=datetime.datetime.now()
print j-i
print Solution_digui().Fibonacci(39)
k=datetime.datetime.now()
print k-j

输出:

63245986
0:00:00
63245986
0:00:40.448000

可以发现,非递归实现不到1秒,递归实现需要40多秒

以上是关于非递归实现斐波拉契函数的主要内容,如果未能解决你的问题,请参考以下文章

斐波拉契数列简单总结

递归1.2用递归函数来实现获取斐波拉契数列中第n个数字的值

斐波拉契的不同解法

C# — 用递归实现斐波拉契数列的第n项

《剑指offer》------斐波拉契数列

实现斐波拉契数列的四种方式python代码