def recursion(x):
answer = 0
if(x > 10):
answer +=1
return recursion(x - 1)
return answer
recursion(15)
我只是玩弄python和遞歸函數,並做了這個,但奇怪的是有錯誤。Python遞歸混淆
這是爲什麼打印0,而不是我期待的答案:
def recursion(x):
answer = 0
if(x > 10):
answer +=1
return recursion(x - 1)
return answer
recursion(15)
我只是玩弄python和遞歸函數,並做了這個,但奇怪的是有錯誤。Python遞歸混淆
這是爲什麼打印0,而不是我期待的答案:
你需要作出回答一個全局變量:
answer = 0
def recursion(x):
global answer
...
這是一個有趣的解決方案,我不會想到+1,因爲它將很容易讓OP瞭解...即使一般你想避免全局變量 –
需要遞歸調用添加到您的回答,不退還
def recursion(x):
answer = 0
if(x > 10):
answer = answer + 1 + recursion(x - 1)
return answer
有時它有助於通過喲我們的代碼...調試器出色地完成了這一任務,但是您也可以使用pythontutor.com來可視化執行。
this will visually show you what happened with your old code and why it was broken
哦,我看到了謝謝 – NewtoJava
正在發生的事情是,每次你打電話遞歸答案的值設置爲0的功能,您可以將其更改爲:
answer = 0
def recursion(x):
global answer
if(x > 10):
answer += 1
return recursion(x - 1)
return answer
recursion(15)
和更好的實現將是:
def recursion(x):
if(x > 10):
return 1 + recursion(x - 1)
return 0
因爲answer
定義是在局部範圍內。
這意味着此函數調用中的answer
與上次調用不一樣。
你的代碼應該是
def recursion(x , answer):
if(x > 10):
answer +=1
return recursion(x - 1 , answer)
return answer
print(recursion(15 , 0))
固體功能編程示例解決方案+1 –
的Cuz你的答案是一個局部變量,每次調用函數的時候,有一個「新的答案對」,就這樣:
遞歸(15 ):答案= 0答案+ = 1
遞歸(14):答案= 0答案+ = 1
...
遞歸(10):答案= 0跳轉如果然後返回答案遞歸(11), 然後遞歸(12)...... 爲你的程序的正確方法應該是:
answer = 0
def recursion(x):
global answer
if(x > 10):
answer +=1
return recursion(x - 1)
return answer
變量answer
八方通返回0
更好的解決方案:
def recursion(x, answer):
if(x > 10):
answer +=1
return recursion(x - 1, answer)
return answer
recursion(15, 0)
因爲答案只能是1或0 ... –
你是什麼意思?我返回的答案是從0開始,但是當x> 10時,我加1回答每個循環。所以第一個x是15,然後是14,13,12,11,這是5個循環加1回答。所以它不應該返回5嗎? – NewtoJava
'answer'是一個局部變量。每次調用recursion()時,它都被聲明並設置爲零。 – dave