您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 有人可以解释为什么这会修复我的递归错误吗?

5b51 2022/1/14 8:22:47 python 字数 1749 阅读 555 来源 www.jb51.cc/python

我在 Python中递归地实现二进制搜索(我知道这很糟糕)并且使用以下代码获得了最大递归错误: def bs_h(items,key,lower,upper): if lower == upper: return None mid = (lower + upper) // 2 if key < items[mid]: return bs_h(

概述

def bs_h(items,key,lower,upper):
    if lower == upper:
        return None
    mid = (lower + upper) // 2
    if key < items[mid]:
        return bs_h(items,mid)
    else:
        return bs_h(items,mid,upper)

def bs(items,key):
    return bs_h(items,len(items)-1)

然后我改变了我的参数和基本情况,如下所示:

def bs_h(items,upper):
    if lower + 1 == upper:
        return None
    mid = (lower + upper) // 2
    if key < items[mid]:
        return bs_h(items,-1,len(items))

这修复了错误,但我不确定原因.有人可以解释一下吗?

>它会终止吗?
>如果确实如此,它有多深?

代码运行期间的某个时刻,您可能会调用以下内容

bs_h(items,10,11)

然后导致:

mid = (lower + upper) // 2
    = (10 + 11) // 2
    = 10
if key < items[10]:
    return bs_h(items,10)
else:
    return bs_h(items,11)

请注意最后一条语句 – 它与条目调用相同.如果程序此时结束,它将始终以递归方式执行.

总是检查你将如何逃避递归,顺便说一句,检查你的“新改进版本”.

总结

以上是编程之家为你收集整理的python – 有人可以解释为什么这会修复我的递归错误吗?全部内容,希望文章能够帮你解决python – 有人可以解释为什么这会修复我的递归错误吗?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶