为什么这个递归打印多行?

Why this recursion prints multiple lines?

谁能解释一下这个 Python 递归代码是如何工作的? 我只是不明白为什么它打印六个数字而不是一个(21)...为什么它以 1 开头? 抱歉,我很菜鸟,我知道...非常感谢您的帮助。

代码:

def func(k):
  if(k > 0):
    result = k + func(k - 1)
    print(result)
  else:
    result = 0
  return result

print("\n\nRecursion Results")
func(6)

输出:

Recursion Results
1
3
6
10
15
21

嗯,每次用 k > 0 调用 func(k) 时,都会调用 print 语句。 func 被重复或递归调用,所以 print 被重复调用,所以你看到多行。

从您的 func 中删除 print 并执行 print(func(6)) 以仅显示最终结果。

基本上,当您的代码运行第 3 行时 (result = k + func(k - 1)),它首先查看 fun(k-1)(如果您从 6 开始,则为 5),所以它运行它直到你再次到达 (result = k + func(k - 1)) ,其中它再次优先考虑 fun(k-1) ...直到你的 fun(k-1) == fun(0).

在 fun(0) 处,代码运行您的 else 语句(因此它不打印任何内容),然后返回到 fun(1),其中它将在返回值之前打印 1...直到您得到玩得开心(6).

如果您想逐步查看代码的作用,我建议您使用 python tutor,这是一个可让您逐步查看代码中发生的情况的网站。

学习愉快python!!!

(ps,这是站点的 link:https://pythontutor.com/visualize.html#mode=edit)