为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我会收到 RecursionError:超出最大递归深度?

为什么我会收到 RecursionError:超出最大递归深度?

函数式编程 2021-11-16 16:54:59
这是代码:def isEven (n):    #function checks if the number is even or odd    if (int(n)%2) == 0:        True    else:        Falsedef Edit(b,x,y): #function loops through the number   m = str(b)   for i in range(1, len(m)+1):        if isEven(m[-i]):            continue        elif int(m[-i+(len(m))]) > 5:            b = b + 1        else:            b = b - 1        y = y + 1        x = x + 1   Edit(b,x,y)number = input()Number = int(number)caseNum = 0moves = 0Edit(Number,caseNum,moves)print('Case #' + str(caseNum) + ' : ' + str(moves))我想创建一个代码来检查数字中是否有奇数位并递增或递减数字直到数字中没有奇数位。
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我不太清楚您期望的输出是什么,因此假设您不想要数字中的奇数(4567 -> 4468)


您只需通过以下方式即可:


n = [int(i) for i in input("Enter a number: ")]

caseNum = 0


for i, x in enumerate(n):

    if x % 2 != 0:

        if x > 5:

            n[i] += 1

        else:

            n[i] -= 1

        caseNum += 1


print("".join(str(x) for x in n), "CaseNum: ", caseNum)

如果您已经在主程序中使用了 if-else,则您实际上并不需要 Even 函数。


对于您的代码,如果您使用的是 Even 函数,则需要返回值True或False。


 def isEven (n):    #function checks if the number is even or odd

    if int(n) % 2 == 0:

        return True

    else:

        return False

您正在RecursionError调用相同的函数(循环它)而没有任何停止条件。


 Edit(b,x,y)

您函数中的此语句正在创建问题,并且在限制之后,python 停止执行并给出错误。


如果你能详细说明使用caseNum和动作,我就可以在程序中添加它们。


查看完整回答
反对 回复 2021-11-16
?
墨色风雨

TA贡献1853条经验 获得超6个赞

即使没有无条件调用Edit(b,x,y)作为最后一步,您的代码也正朝着“超出最大递归深度”的方向发展。


问题是您正在根据数字增加或减少数字。考虑一个像3000一个高阶奇数位的数字。在 1000 次递归调用中,您需要将它增加或减少近 1000 次。但是默认的堆栈深度只有 1000 帧,所以你已经沉没了。


但情况会变得更糟。考虑一个简单的数字,例如10,您的递减和递增逻辑会将其更改为 9,然后变回 10,然后是 9,然后是 10,依此类推。


你最好像@DeepMehta 那样递增和递减单个数字,而不是整个数字。


要正确控制对 的递归调用Edit(),请使用您的x和/或y计数器来确定在此调用期间是否进行了任何更改。如果没有变化,返回号码。如果有变化,递归完成工作。


至于isEven()功能,你可以简单地做:


def isEven(number):

    ''' function checks if the number is even or odd '''


    return int(number) % 2 == 0


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信