Python 递归函数返回值为 None 的解决办法

简介: 在使用 Python 开发的过程中,避免不了会用到递归函数。但递归函数的返回值有时会出现意想不到的情况。

在使用 Python 开发的过程中,避免不了会用到递归函数。但递归函数的返回值有时会出现意想不到的情况。


下面来举一个例子:


>>> def fun(i):
...     i += 1
...     if i < 5:
...         fun(i)
...     else:
...         return i
...
>>> r = fun(0)
>>> print(r)
复制代码


比如上面这段代码,乍一看没什么问题,但返回值并不是我们期望的 5,而是 None


>>> print(r)
None
复制代码


要解决这个问题也简单,就是在执行递归调用的时候,加上 return 语句。


修改之后的代码如下:


>>> def fun(i):
...     i += 1
...     if i < 5:
...         return fun(i)
...     else:
...         return i
...
>>> r = fun(0)
>>> print(r)
5
复制代码


现在输出的结果就符合我们的预期了。


最后补充一句,如果想要了解这背后深层的原理,可以看看函数调用栈相关的资料,这里就不过多介绍了。


本文就到这里了。


目录
相关文章
|
1天前
|
Python
Pycharm为Python项目配置环境不生效,解决办法
在PyCharm中,项目依赖配置更改后未生效。解决步骤包括:1) 查找`C:\Users\username\AppData\Roaming\JetBrains\PyCharm2022.2\options\jdk.table.xml`,2) 删除`&lt;jdk&gt;&lt;/jdk&gt;`标签内的旧配置内容,然后重启PyCharm以应用新目录。
8 0
Pycharm为Python项目配置环境不生效,解决办法
|
16天前
|
存储 算法 数据挖掘
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
|
16天前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
16天前
|
存储 机器学习/深度学习 算法
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
|
15天前
|
SQL 算法 数据可视化
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
|
19天前
|
Python
Python多线程中递归锁如何解决死锁问题的详细阐述
Python多线程中递归锁如何解决死锁问题的详细阐述
|
19天前
|
安全 Python
Python多线程中的死锁与递归锁
Python多线程中的死锁与递归锁
|
25天前
|
Serverless 数据处理 数据库
Python函数的多返回值详解
Python函数的多返回值详解
9 1
|
16天前
|
存储 机器学习/深度学习 算法
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
|
16天前
|
存储 SQL 算法
LeetCode第22题:生成括号【22/1000 python 递归|动态规划】
LeetCode第22题:生成括号【22/1000 python 递归|动态规划】