首页 > 解决方案 > 不了解如何执行递归行

问题描述

这是我的代码,它仅以 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]

标签: pythonrecursion

解决方案


函数的每一层都有自己的独立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]

顺便说一句,您缺少23or的基本情况28。如果我这样做,change(33)我会得到一个断言错误。


推荐阅读