斐波那契数列--1.0

#斐波那契数列
#一列数字,第一个值是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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值