python中,经常用fibonacci数列来解释递归,但理解起来总会有那么一段迷糊期。其实拆开来看,也不复杂。
def fibonacci(n):
if n==1 or n==2:
return 1
else:
return fibonacci(n-1)+fibonacci(n-2)
print(fibonacci(5))
解析:
1.把参数“5”代入fibonacci(n)函数,因为不等1或2,所以运行else,返回:执行fibonacci(4)+fibonacci(3),即要求执行两个函数。.
2.1 执行fibonacci(4)函数:
2.1.1 因为参数为4,仍然不等1或2,所以继续运行else,返回:执行fibonacci(3)+fibonacci(2)。其中fibonacci(2)的结果是1。
2.1.1.1 执行fibonacci(3),继续不等于1或2,所以还是运行else,返回:执行fibonacci(2)+fibonacci(1)——>fibonacci(3)的结果是2
由此,fibonacci(4)的结果是3(1+2)
2.2 执行fibonacci(3)函数:
由此可知,结果为2.。
3.回到fibonacci(5),得到结果:fibonacci(4)+fibonacci(3)=3+2=5
递归能够计算该数列,但因为“中间环节”太多,n值稍大一点(比如50),计算时长就很大。所以,如果单纯想要计算一下数据,不如直接一些为好——再大的数值也是秒算
a,b,i=0,1,1
for n in range(100):
print("N项为:",i,"Fi值为:",b)
a, b ,i = b, a+b, i+1