python递归中的return"陷阱"

在做一道练习题(参照下篇博文《在当前目录下递归的查找包含指定字符串的文件》)的时候,发现函数中的return的值竟然是None,百思不得其解,尝试化繁为简,用以下的简单的代码验证了一下

1|0问题版本代码:为什么return i 返回的是 i , 而print(i)得到的是 0 


def func(i): if i == 0: print(i) return i elif i > -2: i = i-1 func(i) print(func(3)) 运行结果: 0 None

如果把递归过程画成流程图,或许更容易理解一些

1|1case1: 有递归的情况


1|2case2: 无递归的情况


2|0错误的解决方案:


def func(i): if i == 0: print(i) return i elif i > -2: i = i-1 func(i) return(i) print(func(3)) 运行结果: 0 2

仍然图解一下,更直观

3|0正确的解决方案一:


def func(i): if i == 0: print(i) return i elif i > -2: i = i-1 return(func(i)) print(func(3)) 运行结果: 0 0

4|0正确的解决方案二:


result = None def func(i): if i == 0: print(i) global result result = i elif i > -2: i = i-1 func(i) return result print(func(3)) 运行结果: 0 0

 

 

5|0参考文章


https://www.cnblogs.com/yechenkai/p/7143475.html

https://www.cnblogs.com/lincappu/p/8146141.html

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9269141.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(2470)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示