python – 有人可以解释为什么这会修复我的递归错误吗?
发布时间:2020-12-30 20:26:20 所属栏目: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(
|
我在 Python中递归地实现二进制搜索(我知道这很糟糕)并且使用以下代码获得了最大递归错误: 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 – Django Test Client post()返回302,尽管视图的帖
- 使用(Py)GTK调整大小时自动缩放图像
- python – TypeError:JSON对象必须是str,而不是’dict’
- python – 使用scikit-learn(sklearn),如何处理线性回归的缺
- 在IPython中使用Interactive Shell之外的魔术命令
- 如何在Python中获取类属性的定义顺序?
- python – 查找列表中所有可能的子列表
- python – 如何覆盖BaseHTTPRequestHandler log_message()方
- python – 从命令行运行PyCharm项目
- python – 用py2exe创建的可执行文件不能在windows xp 32bi
