基于Python实现斐波那契数列。
- 方法一:使用循环,通过yield生成器返回结果,使用时通过list转换为列表。这种方法效率更高,占用空间较小;
- 方法二:使用递归实现,效率很低,占用内存较高。
n=40
时,方法一耗时不足1s,方法二耗时68s。
import time
def fib(n):
a = 0
b = 1
for i in range(n):
yield b
a, b = b, a + b
def fib_recursive(n):
n = int(n)
if n <= 0:
raise Exception('请输入大于0的值!')
if n == 1 or n == 2:
return 1
else:
return fib_recursive(n - 1) + fib_recursive(n - 2)
if __name__ == '__main__':
t1 = time.time()
print(list(fib(40)))
t2 = time.time()
print(fib_recursive(40))
t3 = time.time()
print('---计算耗时---:\n\t循环实现:%s\n\t递归实现:%s\n' % (t2 - t1, t3 - t2))