首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >防止超过最大回流深度

防止超过最大回流深度
EN

Stack Overflow用户
提问于 2015-05-31 21:33:20
回答 4查看 1.8K关注 0票数 0

我正在尝试制作一个小脚本,并以一种高效的方式来完成它,其中包括调用内部的函数。但是,这会给出消息"RuntimeError:在获取对象的str时超过了最大递归深度“。

我试图让程序在达到此目标之前退出,但它似乎没有完成这项工作。我想知道是否有任何方法来停止程序在一定数量的运行,这样这个错误不会发生。下面是我试图解决这个问题的方法:

代码语言:javascript
代码运行次数:0
运行
复制
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)

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-31 21:40:24

尝试输入计数器并避免给出令人困惑的变量名称:

代码语言:javascript
代码运行次数:0
运行
复制
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)

在这里跑。

票数 2
EN

Stack Overflow用户

发布于 2015-05-31 21:46:21

递归调用函数可能很方便,但显然效率不高(至少在您正在使用的python的实现中是这样,因为您得到了这个错误)。

然而,您要做的,即限制递归深度,已经发生了什么,因为您得到了一个与递归深度相关的运行时错误。

为什么不直接在更高的级别捕捉运行时错误呢?

票数 0
EN

Stack Overflow用户

发布于 2015-05-31 21:49:16

快乐的数字(这就是你正在做的) 结束于1或在周期4,16,37,58,89,145,42,20,4,.。所以,当你到达1或4的时候,就停止吧。不过通常情况下,如果你的递归太深,你应该考虑一个迭代解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30562935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档