为什么这个递归给出以下输出?

Why does this recursion give following output?

我有一个练习,代码如下:

def rec_count(number):
    print(number)
    # Base case
    if number == 0:
        return 0
    rec_count(number - 1)  # A recursive call with a different argument
    print(number)


rec_count(5)

给出了这个输出:

5
4
3
2
1
0
1
2
3
4
5

我不明白为什么函数到达 0 后不继续负数,而是给出 1 到 5 的数字。有人可以解释一下吗?

提前致谢

关于负数:调用rec_count(0)时,在到达rec_count(0-1)之前遇到了return语句。一旦到达 return 语句,函数的执行就会结束,因此永远不会调用 rec_count(-1)

关于增加的数字:请注意在递归 rec_count 调用后 有一个 print(number) 语句。

这与递归调用后的第二个打印语句有关。当 rec_count 被调用时,第一个打印语句被命中并且预期的打印输出发生(5,4,3,2,1)。基本情况也符合预期。但是,那是级联 returns 发生的时候,然后以相反的顺序命中第二个打印语句,导致您看到额外的打印输出。

一旦你使用return语句就会结束一个函数 它继续从 0 到 5 计数,因为你调用了那个函数但它没有结束

一个好的解决方案是执行如下操作

def rec_count(number):
   print(number)
   for i in range(number*2):
        number = number - 1
        print(number)
rec_count(5)