#斐波那契数列
#一列数字,第一个值是1,第二个值是1,从第三个开始,每一个数字的值等于前两个数字出现的值的和
#数学公式为: f(1) = 1, f(2) = 1, f(n) = f(n-1) + f(n-2)
#例如: 1,1,2,3,5,8,13,…
#下面求斐波那契数列有一定问题,比如n一开始就是负数,如何修正
#n表示第n个斐波那契数列的值
def fib(n):
if n == 1:
return 1
if n == 2:
return 1
#思考:为什么后面return能正确执行,而不用else语句
return fib(n-1) + fib(n-2)
print(fib(6))
print(fib(7))
报错提示:超过最大递归深度。 解决办法:可以修改递归深度的值,让它变大大一点。
上述代码改进后:
def fib(n):
if n < 1:
print("输入有误!")
return -1
if n == 1:
return 1
if n == 2:
return 1
#思考:为什么后面return能正确执行,而不用else语句
return fib(n-1) + fib(n-2)
result = fib(0)
if result != -1:
print(result)
再增加count,(但是count代表什么意思,网上搜递归次数等于2*n-1)
count = 0
def fib(n):
global cnt
count+=1
if n < 1:
print("输入有误!")
return -1
if n==1:
return 1
if n==2:
return 1
return fib(n-1)+fib(n-2)
values = fib(20)
if values != -1:
print (count ,values)