解决python递归函数及递归次数受到限制的问题

解决python递归函数及递归次数受到限制的问题

目录

递归函数及递归次数受到限制

求和:sum=n+n(n-1)+…+1

求阶乘:n!=1x2x3…xn

解决问题的办法是修改可递归的次数

如何控制递归的次数

第一种

第二种

第三种

递归函数及递归次数受到限制

一个函数在内部调用自己,那么这个函数是递归函数。递归会反复使用本身,每递归一次,越接近最终的值。当一个问题可以由许多相似的小问题解决, 可以考虑使用递归函数。随着递归的深入,问题规模相比上次都应所减小。return函数本身的方法保证了递归的持续进行,但是如果没有明确的结束条件,递归会无限进行下去。所以当已经到了问题解决的程度, 应该告诉函数结束递归,这就需要明确的结束条件。

常见的两个递归例子:求和、求阶乘n!

求和:sum=n+n(n-1)+…+1 def sum(n):     if n > 0:                       return n+sum(n-1)     else:         return 0            new_sum = sum(10) print(new_sum) #output 55 求阶乘:n!=1x2x3…xn def factorial(n):     if n == 1:         return 1     else:         return n*factorial(n-1) new_sum = factorial(5) print(new_sum) #output 120

使用递归函数需要注意递归次数默认限制为1000,如果递归次数较多会导致栈溢出的问题

比如

def sum(n):     if n > 0:         return 1+sum(n-1)       else:         return 0 new_sum = sum(1000) print(new_sum)

会报RecursionError: maximum recursion depth exceeded in comparison的错误

解决问题的办法是修改可递归的次数 import sys sys.setrecursionlimit(1500)#可递归次数修改为1500 def sum(n):     if n > 0:         return 1+sum(n-1)       else:         return 0 new_sum = sum(1000) print(new_sum) #output 1000

修改递归次数时需要注意,修改可递归次数为1500,递归深度到不了1500,在1400左右。默认可递归次数为1000,递归深度也到不了1000,到992左右

如何控制递归的次数

经常会用到递归,虽然能解决很多问题,但其缺点很明显,有可能无法跳出造成死循环,能控制递归次数就可以避免这种情况。

用lua尝试了几种方法,

第一种

在方法内定义一个变量计数:

function recursionTest()     local times = 0     if times < 10 then         times = times + 1         recursionTest()     end     if times == 0 then         print("outer round")     end end

执行下来,是无法限制的,因为局部变量每次都会重置为0。

第二种 local recurTimes = 0 function recursionTest2()     if recurTimes < 10 then         recurTimes = recurTimes + 1         recursionTest2()     end end

这种方法可以控制次数,但是变量需要定义在方法体外,执行函数前都需要先把这个变量设为0,需要在递归方法外包一层,比较繁琐。

第三种 function recursion(str, t)     str = str or "first time "     t = t or 0     t = t + 1     print(str, t)     if t < 10 then         recursion("times:", t)     end     if t == 1 then         print("outer round")     end end

在递归时传入一个自增变量,达到阈值时停止递归,执行最外层时无需传参,默认值为0,且可根据t的值判断当前的递归层数,可以在递归结束时,在最外层执行完之前做其他事情,一举两得。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    wps如何修改页眉上边距

    wps如何修改页眉上边距,WPS教程,1.WPS版word怎样设置页眉边距WPS中word设置页眉边距技巧“页边距”:页面上打印区域之外的空白空间。1、设

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    修改电脑系统信息|电脑更改系统

    修改电脑系统信息|电脑更改系统,,电脑更改系统重命名步骤如下:1、首先,点击桌面左下角的”菜单“图标,然后点击”设置“进入设置页面。2、接