代码改变世界

递归

2018-07-19 21:57  冻奶香甜玉米片  阅读(256)  评论(0)    收藏  举报

sys.setrecursionlimit(1500) 设置递归层次为1500层

 

sys.getrecursionlimit 得到最大地递归层次

 

一个正常的递归必须设置结束条件,递归结束后会返回到上一层函数调用其的位置,继续执行未执行的代码

 

递归的特征:

1.递归的每一次进入判断条件都应该更加接近结束条件

2.必须有结束条件

3.执行小效率不高,因为程序的控制权以为一层层进入一层层退出栈帧而不断交换,这会导致效率低下的问题

 

栈帧:每一次调用函数(猜想是递归函数)所有变量之类的所占的内存

 尾递归:递归的优化,下一层函数与当前层毫无关系,即可进入下一层函数时立刻释放当前层内存,当前层已经没有活跃的代码了,可以解决效率低的问题

例如:

def func(n):

  print(n)

  return func(n-1)

当前层已经没有活跃的代码了,已经检测到return了

但是python的解释器没有做尾递归的优化,依旧是生成许多栈,C有这种优化