[英]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.