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