输入一个正整数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)语句以升序的形式退出递归,与进入递归时一个相反的过程,所以为顺序输出。
网友评论