python - 递归/递归跟踪
问题描述
我正在尝试查看此函数的递归跟踪,但为什么我得到“无”输出?
def fnc(k):
if k == 0:
return 0
fnc(k-1)
fnc(k-1)
fnc(k-1)
fnc(k-1)
解决方案
通过手动评估小参数的代码,您的问题实际上很容易识别。假设您传递k = 1
给fnc
:
def fnc(k):
# k == 1 != 0, so we skip the return
if k == 0:
return 0
# Now we call fnc four times with k - 1 = 0 as an argument
# All four function calls will return 0
# But we don't use the returned value in any way (no assignment, no return)
fnc(k - 1)
fnc(k - 1)
fnc(k - 1)
fnc(k - 1)
# The function ends without returning anything, therefore the return value is None
我不知道您要达到什么目的,但是如果您希望返回基本案例值,则可以这样做:
def fnc(k):
if k == 0:
return 0
return fnc(k-1)
请比较这两个功能,也许可以手动单步执行并尝试了解到底发生了什么。
推荐阅读
- javascript - Javascript 对象,返回包含嵌套数组中的值的更新对象
- r - grDevices::dev.new() 第一次不起作用
- vue.js - 带有 imagemin webpack 插件的 Vue cli 3
- sql - 大于或小于一个数量
- ms-access - 通过访问表单上的按钮将费用记录复制到发票详细信息
- java - Spring Integration 从 REST 服务获取分页结果
- javascript - 查找最大匹配计数
- r - 使用 ggplot scale_x_yearmon 缺少 yearmon 标签
- sql - SSIS 中的 Google Analytics/Adwords 数据?
- dataframe - 为什么 Dask 在我的 Dataframe 中填写“foo”和 1