美文网首页
对递归函数的理解

对递归函数的理解

作者: 1直领悟不够 | 来源:发表于2019-03-24 16:19 被阅读0次

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

    相关文章

      网友评论

          本文标题:对递归函数的理解

          本文链接:https://www.haomeiwen.com/subject/rcyuvqtx.html