python学习笔记 day17 初识递归

前言

从前有座山,山上有座庙,庙里有个老和尚,老和尚再给小和尚讲故事:从前有座山,山上有座庙...

这其实就是一个递归的例子,只不过这是只递不归,,

再比如这段代码:

def story():
    print("从前有座山")
    story()

story()

调用story() 会不断地执行里面的代码,不断又调用story(),我们都知道当调用函数的时候,会开辟一个内存空间,但是这段代码,不断的调用story()而且最外层的调用还没有被释放,内存一直没被占用,一直被开辟空间,python设置了递归调用的最大深度是998,所以这段代码执行之后会报错:

就是递归错误,超过了递归的最大深度~

 

初识递归:-----在函数内部调用该函数就是递归

比如下面这个例子:

 

问题分析,一次次往下-----递;结果一次次向上传递---归

转化为代码:

def age(n):
    if n==4:
        return 40
    else:
        return age(n+1)+2   

print(age(1))

运行结果:

 

分析过程:

首先你要明白age()这个函数是有返回值的!!

当你调用age(1)时,执行 return age(2)+2 -----》然后你要去执行 age(2): return age(3)+2-----》age(3):return age(4)+2-----》age(4):return 40  

然后将最后一层函数返回的结果一层层往上传: age(4)拿到返回值40-----》放在调用它age(4)的位置 就是age(3)=40+2  所以age(3)的返回值 42----》,age(2)的返回值局势42+2=44 ----》age(1)的返回值就是44+2=46

最后返回给函数调用age(1)的位置,打印该结果~

 

posted @ 2018-09-09 22:53  写的BUG代码少  阅读(159)  评论(0)    收藏  举报