递归函数返回值获取的问题

二分法查找递归形式编写二分法查找

递归的方式编写简单的二分法查找函数得到值得索引,使用二分法源数据必须是有序的。

def func(n, left, right):
    mid = (left+right)//2
    print('函数又调用了一次')
    if right >= left:
        if L[mid] > n:
            right = mid - 1
            func(n,left,right)
        if L[mid] < n:
            left = mid + 1
            func(n,left,right)
        if L[mid] == n:
            print('找到了')
            return mid
    else:
        print('没有找到')
        return -1

L = [11,22,33,44,55,66,77,88,99]

print(func(33,0,len(L)-1))
"""结果
函数又调用了一次
函数又调用了一次
函数又调用了一次
找到了
None
"""

猜测下上面的代码最后打印值应该是什么? 结果是None。这就是使用递归想要获取返回值的坑,上面的33的索引应该是2,我们想要的也是2,代码没有任何地方写返回None,但是结果却是None.这是因为,2是第三次调用函数是的到的返回值,这个返回值返回给了调用它的地方,也就是上面函数体里面调用它本身的地方,我们并没有接收这个值,所以最终返回值仍然是None.想要得到2需要修改代码如下,将内层调用的函数返回值作为上层函数的返回值再次return。

def func(n, left, right):
    mid = (left+right)//2
    print('函数又调用了一次')
    if right >= left:
        if L[mid] > n:
            right = mid - 1
            return func(n,left,right)   #重点
        if L[mid] < n:
            left = mid + 1
            return func(n,left,right)   #重点
        if L[mid] == n:
            print('找到了')
            return mid
    else:
        print('没有找到')
        return -1

L = [11,22,33,44,55,66,77,88,99]

print(func(33,0,len(L)-1))
"""结果
函数又调用了一次
函数又调用了一次
函数又调用了一次
找到了
2
"""
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值