基础递归结果不符合预期,为何未出现负数递减输出?
递归函数执行逻辑解析
你的递归函数代码
def print_numbers(n): if n == 1: print(n) print("recursion over") else: print_numbers(n-1) print(n) print_numbers(10)
实际输出结果
1 recursion over 2 3 4 5 6 7 8 9 10
问题解答
为什么输出是递增而非递减到负数?
你的函数里明确设置了递归终止条件:当n == 1时,只会执行打印操作,不会再调用自身。
递归的执行分为两个阶段:
- 递推阶段:调用
print_numbers(10)时,因为10≠1,会先调用print_numbers(9);print_numbers(9)同样触发else分支,调用print_numbers(8)……这个过程一直持续到print_numbers(1),此时触发if分支,打印1和"recursion over",递推阶段结束。 - 回归阶段:递推到终止条件后,程序会逐层回到上一层未执行完的函数中。比如
print_numbers(1)执行完后,回到print_numbers(2),执行它的print(n)打印2;接着回到print_numbers(3)打印3……直到回到最开始的print_numbers(10),打印10。
整个流程是先递推到终止点,再逐层回归打印,所以输出是递增的。而不会递减到负数,因为n=1时就停止了递归调用,不会触发print_numbers(0)或负数的调用。
必须写return或者正式终止代码吗?
不需要额外写return语句。在Python中,函数执行完所有语句后会自动返回None。你的代码已经通过if n == 1设置了明确的终止条件,这才是防止递归无限执行的核心——只要终止条件能被触发,递归就会停止,不需要刻意写return来终止。
内容的提问来源于stack exchange,提问作者Ashkon
相关产品推荐
相关产品推荐

