今下午刷题的时候遇到个问题就是, 定义一个方法实现递归,当符合条件跳出递归后明明里边使用了return + 变量,按道理应该返回变量值,但是在主函数调用该方法返回的却None。
琢磨了好一会,原来,return 是将结果返回给上一层递归了,而上一层递归又没有将该变量传给上上层递归,所以这个变量就被埋没了。
现在我举个例子说明一下:
def addToThree(n):
if n == 3:
print(n)
return n
addToThree(n + 1)
if __name__ == '__main__':
print(addToThree(1))
看一下上面的代码结果是什么呢?如果你是跟我一开始想的那样的话,说明你也以为这样会输出两个3,但这里就输出了一次,而且是在addToThree方法里面输出的。
至于为什么会这样,我们就按代码的运行顺序一步步分析一下:
先看主函数,print(addToThree(1))会调用addToThree方法
因为n不为3,所以调用addToThree方法继续执行。此时的n已变为2。2还是不等于3,继续将2+1传入。2+1=3,符合终止条件了,就将结果返回。返回给谁呢?返回给主函数?不是的,谁调用了这个方法就返回给谁。因此是返回给上一级即当n=2时的方法里面。
此时的它无依无靠,手里有变量却没人要。
为了顺利将变量传至主函数里面,我们要将变量传递。你传给我我传给他他传给她..传递的方法就是..
前面加个return。
没了