1,2,3,5,8,13,21,34,55,89,144…
黄金比0.618,前一个比后一个数的值,越接近0.618
数学函数来定义:
F(n)=1,当 n = 1
=1,当 n = 2
=F(n-1) + F(n-2),当 n > 2
def fab(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print('输入错误!')
return -1
while n - 2 > 0:
n3 = n1 + n2
n1 = n2 #把n2,n3 的值赋值给n1,n2再给n3,即一步一步得到最终值
n2 = n3
n -= 1
return n3
result = fab(35)
if result != -1: #等于-1说明程序报错
print('总共有%d对兔子诞生!'% result)
需要两个返回值
def fab1(n):
if n < 1:
print('输入错误')
return -1
if n == 1 or n == 2:
return 1
else:
return fab1(n-1) + fab1(n-2)
result1 = fab1(35)
if result1 != -1:
print('总共有%d对兔子诞生!' % result1)
可以比较一下这两个代码的执行时间,第二个使用递归算法的时间明显高于迭代算法,这也是递归算法的不足之处
有点类似分治思想
下节介绍汉诺塔游戏的代码,可以看到递归的用处使用得当,能够极大的提高代码的运行效率,使解决问题的方法变得容易