python – 如何将以下函数转换为尾递归函数?

weixin_38095552 2019-09-12 12:33:15
我正在跟随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中练习这样做,因为我喜欢语法
...全文
18 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38116481 2019-09-12
  • 打赏
  • 举报
回复
而不是做 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)

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧