#斐波那契数列 #一列数字,第一个值是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)