为什么这个递归给出以下输出?
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)
我有一个练习,代码如下:
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)