python – 如何将以下函数转换为尾递归函数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何将以下函数转换为尾递归函数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1644字,纯文字阅读大概需要3分钟。
内容图文
![python – 如何将以下函数转换为尾递归函数?](/upload/InfoBanner/zyjiaocheng/726/6e939d008c864f8eb731b78dc4facdf6.jpg)
我正在跟随here,我正在尝试将正常的递归函数转换为尾递归函数.我设法理解斐波纳契和阶乘版本,但这个让我很难过.我理解算法在做什么,以及在转换中让我困惑的else语句.
在其他内部,它试图找到一个更接近你正在寻找的数字,然后放弃并找到它找到的数字小于你建议的数字.
我不知道如何编写使尾部递归的辅助函数.对于斐波那契和阶乘,我最终使用了累加器.有没有类似的东西可以在这里使用?
class BSTNode(object):
"""Binary search tree node."""
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def __repr__(self):
return '(%s, %r, %r)' % (self.val, self.left, self.right)
def find_val_or_next_smallest(bst, x):
"""
Get the greatest value <= x in a binary search tree.
Returns None if no such value can be found.
"""
if bst is None:
return None
elif bst.val == x:
return x
elif bst.val > x:
return find_val_or_next_smallest(bst.left, x)
else:
right_best = find_val_or_next_smallest(bst.right, x)
if right_best is None:
return bst.val
return right_best
我知道Python不支持尾递归优化以允许常量堆栈空间但我只是在Python中练习这样做,因为我喜欢语法
解决方法:
而不是做
if right_best is None:
return bst.val
您可以将目前为止找到的最佳结果作为额外参数传递给递归调用,并使递归调用处理此检查.
def find_val_or_next_smallest(bst, x, best=None):
"""
Get the greatest value <= x in a binary search tree.
Returns None if no such value can be found.
"""
if bst is None:
return best
elif bst.val == x:
return x
elif bst.val > x:
return find_val_or_next_smallest(bst.left, x, best)
else:
# bst.val is guaranteed to be the best yet, since if we had
# seen a better value higher up, the recursion would have gone
# the other way from that node
return find_val_or_next_smallest(bst.right, x, bst.val)
内容总结
以上是互联网集市为您收集整理的python – 如何将以下函数转换为尾递归函数?全部内容,希望文章能够帮你解决python – 如何将以下函数转换为尾递归函数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。