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

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

遞歸中的變量位置

遞歸中的變量位置

慕桂英546537 2023-09-12 16:35:50
問題是我的代碼不斷將變量反映為零,這是由于該變量是在函數開始時分配的,因此每次我調用該函數時,該值都會計算為零。但是,我需要這個變量賦值才能使代碼正常工作,并將其放置在 elif 語句中的計算結果仍然為零,而將變量放置在函數外部會導致函數無法工作。該程序的目的是使用遞歸來計算字符串中連續字母對的數量,而代碼中沒有 for/while 循環。def countpairs(s):    pairs=0    if len(s)<2:        return 0                            #base case    elif s[0].lower() == s[1].lower():       #recursion        pairs=+1        return countpairs(s[1:])    else:                                   #recursion        pairs=+0        return countpairs(s[1:])print(countpairs('Hello Salaam'))由于“ll”和“aa”,該代碼的計算結果應該為 2。
查看完整描述

5 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

問題在于變量對會重置每個遞歸調用...當使用計數遞歸算法時,您不需要計數的變量,這就是美妙之處相反,嘗試思考如何遞歸調用可以幫助您計數。


def countpairs(s):

    if len(s)<2:

       return 0                       

    elif s[0].lower() == s[1].lower():      

        return countpairs(s[1:])+1

    else:                                

        return countpairs(s[1:])

print(countpairs('Hello Salaam'))

就這樣,在遞歸調用中,“計數器”每次應該變大,將計數器視為函數堆棧(或類似的東西)的一部分。


查看完整回答
反對 回復 2023-09-12
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

您需要稍微了解一下遞歸將執行的操作:它將遞歸地調用該函數以從該點開始對對進行計數,然后(它應該)添加此實例找到的對(如果有)。

因此,您的函數需要對遞歸調用的結果執行某些操作,而不僅僅是原樣返回。例如,而不是這個

elif s[0].lower() == s[1].lower():
    pairs = +1
    return countpairs(s[1:])

你可以這樣寫:

elif s[0].lower() == s[1].lower():
    return countpairs(s[1:]) + 1

沿著這些思路。您需要做更多的工作才能使其正確,但我希望您明白這一點。


查看完整回答
反對 回復 2023-09-12
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

您需要修復語法:pairs=+1應該是 pairs+=1, 與 相同pairs=+0。您可以將總數傳遞到下一個級別。


def countpairs(s, pairs=0):

    if len(s)<2:

        return pairs                            #base case

    elif s[0].lower() == s[1].lower():       #recursion

        pairs+=1

        return countpairs(s[1:], pairs)

    else:                                   #recursion

        pairs+=0

        return countpairs(s[1:], pairs) 

print(countpairs('Hello Salaam'))  # 2


查看完整回答
反對 回復 2023-09-12
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

您可以通過創建遞歸嵌套函數并pairs在外部函數中定義來完成此操作。這就是我的意思(修復了遇到的其他問題):


def countpairs(s):

    pairs = 0

    def _countpairs(s):

        nonlocal pairs  # Since it's not local nor global.


        if len(s) < 2:  # base case

            return pairs

        elif s[0].lower() == s[1].lower():

            pairs += 1

            return _countpairs(s[1:])  # recursion

        else:

            return _countpairs(s[1:])  # recursion


    return _countpairs(s)


print(countpairs('Hello Salaam'))  # -> 2


查看完整回答
反對 回復 2023-09-12
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

該代碼的計算結果始終為零,因為最后一次遞歸的 s 長度始終小于 2。而是使用 global 關鍵字來獲取對的值。


numberOfPairs = 0

pairsList = []

def countpairs(s):

    global numberOfPairs

    if len(s)<2:

        print("doing nothing")

        return 0                            #base case

    elif s[0].lower() == s[1].lower():       #recursion

        numberOfPairs+=1

        newString = f"{s[0]} is equal to {s[1]}"

        print(newString)

        pairsList.append(newString)

        return countpairs(s[1:])

    else:

        print(f"nothing happened: {s[0]}")                                   #recursion

        return countpairs(s[1:])


print(f"\nThe returned value of countpairs is: {countpairs('Hello Salaam')}")

print(f"Number of pairs: {numberOfPairs}")

print(pairsList)


查看完整回答
反對 回復 2023-09-12
  • 5 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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