亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我會收到 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 關注
  • 309 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號