递归&栈帧空间
Posted caihuajiaoshou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归&栈帧空间相关的知识,希望对你有一定的参考价值。
递归函数: 自己调用自己的函数
1 def digui(n): 2 print(n) 3 if n > 0: 4 digui(n-1) 5 print(n) 6 7 digui(5)
执行结果:
1 5 2 4 3 3 4 2 5 1 6 0 7 0 8 1 9 2 10 3 11 4 12 5
执行过程:
1 """ 2 3 代码从上到下执行: 4 digui(5) 5 print 5 6 digui(4) 7 print 4 8 digui(3) 9 print 3 10 digui(2) 11 print 2 12 digui(1) 13 print 1 14 digui(0) 15 print 0 16 n !> 0 17 print 0 18 19 最内层的函数已经结束 20 开始向外面跳转 21 22 print 1 23 print 2 24 print 3 25 print4 26 prin 5 27 """
1 """ 2 去的过程: 3 n = 5 print 5 n > 0 digui(5-1) 4 n = 4 print 4 n > 0 digui(4-1) 5 n = 3 print 3 n > 0 digui(3-1) 6 n = 2 print 2 n > 0 digui(2-1) 7 n = 1 print 1 n > 0 digui(1-1) 8 n = 0 print 0 n !=0 print 0 9 10 11 digui (0)调用结束 12 开始返回 13 14 15 16 回的过程: 17 n = 1 print 1 digui(1) 结束 18 n = 2 print 2 digui(2) 结束 19 n = 3 print 3 digui(3) 结束 20 n = 4 print 4 digui(4) 结束 21 n = 5 print 5 digui(5) 结束 22 整个函数执行完毕 23 """
阶乘的执行
1 def jiecheng(n): 2 if n <= 1: 3 return 1 4 return jiecheng(n-1) * n 5 6 7 print(jiecheng(5)) 8 9 """ 10 先计算return后面的表达式, 计算完毕后再返回 11 12 去的过程: 13 n = 5 jiechneg(5-1)*5 14 n = 4 jiecheng(4-1)*4 15 n = 3 jiecheng(3-1)*3 16 n = 2 jiecheng(2-1)*2 17 n = 1 if return 1 18 19 # 此时最内层代码执行完毕, return返回1 20 21 22 # 开始执行返回过程 23 n = 2 jiecheng(2-1)*2 1*2 24 n = 3 jiecheng(3-1)*3 1*2*3 25 n = 4 jiecheng(4-1)*4 1*2*3*4 26 n = 5 jiecheng(5-1)*5 1*2*3*4*5
栈帧空间:
1 """ 2 栈帧空间就是运行函数的, 3 调用函数就是开辟一个新的栈帧空间, 4 调用结束后会自动释放栈帧空间 5 """ 6 7 8 9 """ 10 去的过程: 11 没调用一个函数就开辟一块新的栈帧空间, 12 每结束一个变量, 就释放一个栈帧空间 13 递归本质上就是开辟和释放栈帧空间的过程 14 15 16 回的过程: 需要触底反弹 17 1.当前这层栈帧空间的代码全部执行完毕, 18 会自动回到上一层函数的调用处 19 20 2.当前函数遇到return会终止当前函数 21 回到上一层函数的调用处 22 23 """
以上是关于递归&栈帧空间的主要内容,如果未能解决你的问题,请参考以下文章