gpt4 book ai didi

python - Python中如何让递归程序长时间运行不报RunTimeError

转载 作者:行者123 更新时间:2023-11-28 20:44:18 25 4
gpt4 key购买 nike

这段代码是递归阶乘函数。

问题是如果我想计算一个非常大的数字,它会产生这个错误:RuntimeError:超出最大递归深度

import time

def factorial (n) :
if n == 0:
return 1
else:
return n * (factorial (n -1 ) )

print " The factorial of the number is: " , factorial (1500)

time.sleep (3600)

目标是用递归函数做一个可以计算最大一小时的因数。

最佳答案

这是一个非常糟糕的主意。 Python 根本不适合多次递归。我强烈建议您将其切换为一个循环,该循环检查计时器并在达到限制时停止。

但是,如果您对增加 cython 中的递归限制(默认深度为 1000)非常感兴趣,可以使用 sys 设置,sys.setrecursionlimit .请注意,正如文档中所说,“最高可能限制取决于平台”——这意味着无法知道您的程序何时会失败。你、我或 cython 也没有任何办法可以判断你的程序是否会递归一些与你的代码的实际执行无关的东西,如“一个小时”。 (为了好玩,我尝试使用一种传递 int 的方法来计算它已经递归了多少次,并且在 IDLE 完全重新启动之前我达到了 9755。)

这是我认为您应该执行此操作的示例:

# be sure to import time
start_time = time.time()
counter = 1

# will execute for an hour
while time.time() < start_time + 3600:
factorial(counter) # presumably you'd want to do something with the return value here
counter += 1

您还应该记住,无论您是使用迭代还是递归,(除非您使用单独的线程)您仍然会在整个小时内阻塞整个程序。

关于python - Python中如何让递归程序长时间运行不报RunTimeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26964643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com