python - 意外的递归结果
问题描述
为了尝试理解 Turtle Tree 代码,我编写了以下代码,但这让我感到困惑。我本来希望程序在 n=6 时停止在第 2 行。n 是如何减少的?
def num(n):
if n < 6:
print(n)
num(n+2)
print('n here is ', n)
x = 1
num(x)
结果:
1
3
5
n here is 5
n here is 3
n here is 1
解决方案
您的问题是您使用的是递归序列。你的 n 不再减少。当 n 仍然具有该值时,打印语句将紧随其后。
以下是序列的示意图说明:
begin num(1)
- print(n) # n = 1
begin num(3)
- print(n) # n = 3
begin num(5)
- print(n) # n = 5
begin num(7)
- ---
end num(7)
- print('n here is ', n) # n = 5
end num(5)
- print('n here is ', n) # n = 3
end num(3)
- print('n here is ', n) # n = 1
end num(1)
这里的打印调用顺序在逻辑上是从上到下。您可以看到方案中的最后一个 print 语句仍然属于第一个函数调用,其中 n = 1。
推荐阅读
- flutter - 扑动 IAP 如何“恢复购买”
- java - 我应该使用原子整数还是同步
- materialize - 物化选择不在模态中显示
- ruby-on-rails - 为什么我的 Rails URL 路由使用点而不是斜线呈现 URL?
- angularjs - 添加打字稿方法的签名
- android - 如何在 Android 的弹出窗口上处理点击侧的监听器?
- swift - 在 swift 中假设集合类型时类型推断的工作原理
- java - 将 Katalon Studio 更新到版本 5.9.1 - ClassNotFoundException
- c - 如何模拟 send() 以便对函数 commSendPacket 进行单元测试?
- python - 包含轮廓的图像中出现白点