结束递归后return返回None?

今下午刷题的时候遇到个问题就是, 定义一个方法实现递归,当符合条件跳出递归后明明里边使用了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。

没了

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿此后再无WA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值