簡體   English   中英

遞歸功能無法正常工作

[英]Recursion function not working properly

我很難弄清楚這里出了什么問題:

class iterate():
    def __init__(self):
        self.length=1
    def iterated(self, n):
        if n==1:
            return self.length
        elif n%2==0:
            self.length+=1
            self.iterated(n/2)
        elif n!=1:
            self.length+=1
            self.iterated(3*n+1)

例如,

x=iterate()
x.iterated(5)

輸出None 它應該輸出6,因為長度看起來像這樣:5-> 16-> 8-> 4-> 2-> 1

進行一些調試后,我發現self.length返回正確,但是遞歸中出了點問題。 我不太確定 謝謝你的幫助。

在兩個elif塊中,進行遞歸調用后不會返回任何值。 你需要一個return的遞歸調用之前iterated (如return self.iterated(n/2) 如果您未明確return ,則該函數將返回None

可以解決此問題,但是有一種方法可以使代碼更簡單:您實際上不需要成員length 相反,您可以在遞歸調用的結果中加1:

def iterated(n):
    if n==1:
        return 1
    elif n%2==0:
        return 1 + iterated(n/2)
    else:
        return 1 + iterated(3*n+1)

print(iterated(5))

這不需要在類中,因為不需要任何成員。

您缺少return語句:

class iterate():
    def init(self):
        self.length=1
    def iterated(self, n):
        if n==1:
            return self.length
        elif n%2==0:
            self.length+=1
            **return** self.iterated(n/2)
        elif n!=1:
            self.length+=1
            **return** self.iterated(3*n+1)

您只從最深層次的遞歸中返回一個值,然后在第二深層次上忽略它。

所有self.iterated(...)行都應讀取return self.iterated(...)

您應該使用return self.iterated(...)完成每個elif分支,而不僅僅是self.iterated(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM