我正在尝试制作一个小脚本,并以一种高效的方式来完成它,其中包括调用内部的函数。但是,这会给出消息"RuntimeError:在获取对象的str时超过了最大递归深度“。
我试图让程序在达到此目标之前退出,但它似乎没有完成这项工作。我想知道是否有任何方法来停止程序在一定数量的运行,这样这个错误不会发生。下面是我试图解决这个问题的方法:
import sys
n = 0
def cycle(b,n):
total = 0
for i in str(n):
for y in i:
total+=int(y)**b
n+=1
print(total)
if n == 10:
sys.exit()
else:
cycle(b,total)
cycle(2,562)
谢谢。
发布于 2015-05-31 13:40:24
尝试输入计数器并避免给出令人困惑的变量名称:
import sys
def cycle(b,n, counter):
total = 0
for i in str(n):
for y in i:
total+=int(y)**b
counter+=1
print(total)
if counter == 10:
sys.exit()
else:
cycle(b,total,counter)
cycle(2,562,0)
发布于 2015-05-31 13:46:21
递归调用函数可能很方便,但显然效率不高(至少在您正在使用的python的实现中是这样,因为您得到了这个错误)。
然而,您要做的,即限制递归深度,已经发生了什么,因为您得到了一个与递归深度相关的运行时错误。
为什么不直接在更高的级别捕捉运行时错误呢?
发布于 2015-05-31 13:49:16
快乐的数字(这就是你正在做的) 结束于1或在周期4,16,37,58,89,145,42,20,4,.。所以,当你到达1或4的时候,就停止吧。不过通常情况下,如果你的递归太深,你应该考虑一个迭代解。
https://stackoverflow.com/questions/30562935
复制