python递归中的return"陷阱"
2024-09-02 19:46:48
在做一道练习题(参照下篇博文《在当前目录下递归的查找包含指定字符串的文件》)的时候,发现函数中的return的值竟然是None,百思不得其解,尝试化繁为简,用以下的简单的代码验证了一下
问题版本代码:为什么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
如果把递归过程画成流程图,或许更容易理解一些
case1: 有递归的情况
case2: 无递归的情况
错误的解决方案:
def func(i): if i == 0: print(i) return i elif i > -2: i = i-1 func(i) return(i) print(func(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
正确的解决方案二:
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
参考文章
https://www.cnblogs.com/yechenkai/p/7143475.html
https://www.cnblogs.com/lincappu/p/8146141.html
最新文章
- LeetCode——Copy List with Random Pointer(带random引用的单链表深拷贝)
- Ubuntu中安装eclipse ,双击eclipse出现invalid configuration location问题
- BZOJ3641 : 货车运输
- OA系统权限管理设计(转载)
- HDU_2041——走楼梯,递推
- python运维开发(十)----IO多路复用线程基本使用
- bzoj 3224: Tyvj 1728 普通平衡树 替罪羊树
- asp.net微软认证全新考试题库及答案1
- mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】
- CSS揭秘(三)形状
- TensorFlow与OpenCV,读取图片,进行简单操作并显示
- tkinter调取签名网而设计签名页面
- MYSQL水平拆分与垂直拆分
- Codeforces 436E Cardboard Box (看题解)
- 全文检索的Demo
- C++Primer第五版——习题答案详解(七)
- 为什么C++函数形参默认值从最末一个赋值?
- eclipse windowbuilder palette 空白
- 《Android源代码设计模式解析与实战》读书笔记(十)
- 二叉树的遍历——Morris