对递归函数的理解

输入一个正整数N,输出从1到N的所有正整数:

1. 迭代的方式

for i in range(N):
    print(i,end=',')#如果逆序输出,将i改为N-i即可

#输出结果:
0,1,2,3,4,5,6,7,8,9,

2. 递归

def PrintN(N):
    if N:
        print(N,end=' ')  #逆序
        PrintN(N-1)       #递归的一个临界点
        print(N,end=' ')  #顺序
PrintN(10)

#输出结果:
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 

刚开始不太理解,为什么分别在递归函数PrintN前后打印,结果就会截然不同呢,想了一下应该是这样的:
程序每次执行到语句PrintN(N-1)时就会调用一次PrintN,每次调用都会执行一句print(N)(逆序),此时并没有执行PrintN(N-1)后面的print(N)语句
直到PrintN(0),程序开始逐层退出嵌套,每退出一层,执行一次PrintN(N-1)后面的print(N)语句

PrintN(10)

PrintN(9)

PrintN(8)

............

PrintN(0) #直到PrintN(0) ,此时N=1

也可以这样理解,PrintN(N-1)将函数分割成了两部分,进入递归时只执行函数的上半部分,退出递归时只执行函数的后半部分。第一个print(N)语句以降序的形式进入递归,所以为逆序输出;而第二个print(N)语句以升序的形式退出递归,与进入递归时一个相反的过程,所以为顺序输出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容