python - 不了解如何执行递归行
问题描述
这是我的代码,它仅以 5 和 7 的硬币返回金额 >=24 的变化。但我不明白的一件事是正在执行的 coin.append(5) 行的顺序。我知道python逐行执行代码,所以前一行coins = change(amount-5)进行递归调用,如果我运行34的main函数,它将是coins = change(29)。但是该函数会在执行 coin.append(5) 之前在此处调用自身。那么它实际上是如何将 5 添加到最后由 change(24) 返回的列表中的呢?它实际上是否在从 34 再次调用 29 之前执行了 coin.append(5) 行?
def change(amount):
assert amount>=24, "Only amount>=24 is allowed"
if amount == 24:
return [5, 5, 7, 7]
if amount == 25:
return [5, 5, 5, 5, 5]
if amount == 26:
return [5, 7, 7, 7]
if amount == 27:
return [5, 5, 5, 5, 7]
coins= change(amount-5)
coins.append(5)
return coins
print(change(34))
输出:[5, 5, 7, 7, 5, 5]
解决方案
函数的每一层都有自己的独立coins
变量——它不在调用之间共享。
change(34)
call change(29)
call change(24)
return [5, 5, 7, 7]
append 5 to that
return [5, 5, 7, 7, 5]
append 5 to that
return [5, 5, 7, 7, 5, 5]
顺便说一句,您缺少23
or的基本情况28
。如果我这样做,change(33)
我会得到一个断言错误。
推荐阅读
- algorithm - 面临 Hackerrank 问题的溢出问题
- postgresql - PostgreSQL 9.6:为什么这个 pg_restore 命令对我有用,但对我的同事不起作用?
- mysql - Laravel Ajax 以其他格式显示日期时间
- c++ - 冲突的性格声明
- java - 字符串模式检测
- amazon-web-services - 在扩展 aws 实例(docker 容器)时运行脚本
- java - 如何部署 JavaFX 14 JDK11 HSQLDB Java 桌面应用程序
- python - 回调错误更新 plot-div.children (Plotly Dash)
- django - 不尊重每个用户的 Django 特定语言
- rails-activestorage - 如何在 Ubuntu 18.04 LTS 上安装 poppler,以便 ActiveStorage 可以预览 PDF?