【问题标题】:Recursion Limit with Python?Python的递归限制?
【发布时间】:2018-04-18 20:58:28
【问题描述】:

我有一个以递归方式编写的程序,由于其性质,它会大幅波动,因此会超出 Python 的限制。程序的形状也很重要,所以我宁愿不改变它。

我遇到了像这样增加递归限制的情况:

sys.setrecursionlimit(1500)  

我的问题是在我的情况下是否建议像这样增加递归限制?我看到人们出于多种原因反对它。

【问题讨论】:

    标签: python recursion


    【解决方案1】:
    sys.setrecursionlimit(1500) 
    

    对于增加递归深度非常好。(在合理范围内!)您没有发布任何代码,但如果存在“剧烈波动”,这不是一个稳定的解决方案。 Python 大体上不应该用于深度递归。在我看来,您有 3 个选择: 1. 解构你的函数并迭代地做事,而不是递归。

    如果你真的一心想递归: 2.递归使用Java 3.递归使用C++

    【讨论】:

    • 是的,绝对不是“函数式”语言。
    • @MrName:如果您想要 Python 的函数式语言扩展,请查看 Coconut,它会进行尾调用优化,允许无限递归样式。
    【解决方案2】:

    本身不是一个解决方案,但您可以利用 functools.lru_cache 函数装饰器来记忆您的递归函数并防止它完全运行。

    如果不深入了解您在做什么,很难知道这是否可行。如果它只是一个简单的递归数学函数(例如斐波那契数),那么您可能会对这种方法有一些运气。

    优点是您不必对代码进行任何结构更改 - 只需在函数定义的顶部添加 @lru_cache(maxsize=None)。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2019-03-12
      • 2019-06-22
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2018-10-16
      • 1970-01-01
      相关资源
      最近更新 更多