简单介绍一下, 斐波那契数列如下:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
规律(F代表斐波那契数列函数):
当 n <= 0 时 F = 0
当 n == 1 时 F = 1
当 n > 1时 F = F(n - 1) + F(n - 2)
图示:
本文使用递归方法和非递归方法两种方法实现:
递归方法:
按上述伪代码所示:
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
if(n <= 0):
return 0
elif(n == 1):
return 1
else:
return self.Fibonacci(n - 1) + self.Fibonacci(n - 2)
if __name__ == '__main__':
import datetime
start = datetime.datetime.now()
s = Solution()
print s.Fibonacci(39)
end = datetime.datetime.now()
print str((end - start).seconds) + 'seconds'
输出:
63245986
30 seconds
递归方法:
优点:代码简洁
缺点:效率低,占用资源大。每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址及临时变量,而往栈里压入数据及弹出数据都需要时间。
非递归方法:
使用循环的方法实现:
class Solution:
def Fibonacci(self, n):
if n <= 0:
return 0
if n == 1:
return 1
preNumber = 0
beNumber = 1
Fsum = 0
for i in range(2,n+1):
Fsum = preNumber + beNumber
preNumber = beNumber
beNumber = Fsum
return Fsum
if __name__ == '__main__':
import datetime
start = datetime.datetime.now()
s = Solution()
print s.Fibonacci(39)
end = datetime.datetime.now()
print str((end - start).seconds) + ' seconds'
输出:
63245986
0 seconds
明显看出,循环的方法要比递归的方法快。
斐波那契数列在动态规划中有广泛的应用,掌握斐波那契数列的基本原理和计算方法是基础。