[英]python recursive function error RuntimeError: maximum recursion depth exceeded
[英]recursive function python 3 'maximum recursion depth exceeded'
我正在使用下面的遞歸函數創建collatz序列:
def collatz(n):
if n%2 == 0:
return int(n/2)
else:
return int((3 * n)/2)
據我了解,遞歸函數是一個基本上可以自我調用的函數。 下面,我嘗試使用以下方法創建遞歸函數:
def collatz(x):
if x == 1:
"Done"
print(x)
x = collatz(x)
return(x)
從本質collatz
,變量x繼續傳遞到我定義的collatz
函數中,直到達到1。但是,每次我運行遞歸函數時,它都會重復打印'x'
,然后得到
collatz(3)
'RecursionError: maximum recursion depth exceeded in comparison'
我理解的本質上是一個無限循環。 我以為通過將其重新分配給x
到第一個collatz()
的結果中,它將返回新值並繼續直到其達到'1'
但我似乎不太能到達那里。
任何幫助/提示/建議都將非常棒! 謝謝!
遞歸函數具有所謂的“基本案例”和所謂的“遞歸案例”。 基本情況是您應該停止遞歸並返回答案。
在這種情況下,基本情況是x==1
def collatz(x):
if x == 1:
return x
而遞歸的情況是剩下的時間
# continuing from above
else:
if n % 2 == 0:
return collatz(int(n//2))
else:
return collatz(n*3 / 2) # sicut. Note that the collatz sequence
# uses 3n+1 here, not 3n/2 as in the question
注意,在返回新調用的結果之前,我通過collatz
在下一個循環中更改了x
的collatz
。 如果不這樣做,只需return collatz(x)
,就永遠不會達到基本情況並永遠遞歸。
@羅伊·加維雷爾
這是根據他的上述回答得出的最終答案:
def collatz(x):
if x == 1:
"Done"
elif x%2 == 0:
x = int(x/2)
print(x)
collatz(x)
else:
x = int((3*x)+1)
print(x)
collatz(x)
collatz(3)
感謝您的所有幫助!
您需要展示同一功能collatz的兩種不同實現,同時需要將它們組合在一起。
def collatz(n):
if x == 1:
"Done"
print(x)
if n%2 == 0:
collatz(int(n/2))
else:
collatz(int((3 * n)/2))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.