斐波那契数列:
1 2 3 4 5 6 7 8 9 10 ...
1 1 2 3 5 8 13 21 34 55 ...
1.用迭代实现斐波那契数列(非递归方法)
def fab(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print('输入有误!')
while (n-2) > 0:
n3 = n2 + n1 #第三项为前两项和
n1 = n2 #计算完,整体后移,准备计算下一项
n2 = n3
n -= 1
return n3
a = int(input('请输入要计算的斐波那契项数:'))
result = fab(a)
print('第%d项斐波那契数为%d' % (a, result))
2.递归方法
原理:(树形结构图)
Fab(5)
Fab(4) + Fab(3)
Fab(3) + Fab(2) + Fab(2) + Fab(1)
Fab(2)+Fab(1)+Fab(1)+Fab(0) + Fab(1)+Fab(0)
Fab(1)+Fab(0)
def fab1(n):
if n < 1:
print('输入错误!')
if n == 1 or n == 2:
return 1 #如果求的是第一或者第二项,直接结果为1
else:
return fab1(n-1) + fab1(n-2)
a = int(input('请输入要计算的斐波那契项数:'))
result = fab(a)
print('第%d项斐波那契数为%d' % (a, result))
经过比较,递归方法简单,容易理解,但是会浪费大量的CPU资源,计算时间也比非递归方法长了相当多。非递归方法无非就是代码稍微复杂一点点,但是计算时间却很短,也几乎不怎么占用CPU资源。这就是为什么不提倡使用递归方法的原因。