python递归上限,python统计递归次数
本文主要介绍了如何解决python递归函数和递归次数有限的问题,有很好的参考价值,希望对大家有所帮助。如有错误或不足之处,请不吝赐教。
目录
递归函数和递归次数有限Sum: sum=n n(n-1) … 1求阶乘:n!=1x2x3…xn解决问题的方法是修改递归的次数。如何控制递归的次数?第一、第二和第三
递归函数及递归次数受到限制
如果一个函数在内部调用自己,那么这个函数就是递归的。递归会反复使用自己,每递归一次,就越接近最终值。当一个问题可以由很多类似的小问题解决时,可以考虑使用递归函数。随着递归的深入,问题的规模应该会比上次缩小。返回函数的方法本身保证了连续递归,但是如果没有明确的结束条件,递归就会无限地继续下去。因此,当问题已经解决时,应该告诉函数结束递归,这需要明确的结束条件。
常见的两个递归例子:求和、求阶乘n!
求和:sum=n+n(n-1)+…+1
定义金额(n):
如果编号为0:
返回n sum(n-1)
else:
返回0
new_sum=sum(10)
打印(new_sum)
#输出
55
求阶乘:n!=1x2x3…xn
定义阶乘(n):
如果n==1:
返回1
else:
返回n *阶乘(n-1)
new_sum=阶乘(5)
打印(new_sum)
#输出
120
使用递归函数时,需要注意的是,递归次数的默认限制是1000,这样会导致堆栈溢出。
例如
定义金额(n):
如果编号为0:
返回1个总和(n-1)
else:
返回0
new_sum=sum(1000)
打印(new_sum)
将报告重复错误:比较中超出最大重复深度的错误。
解决问题的办法是修改可递归的次数
导入系统
Sys.setrecursionlimit(1500)#递归数被修改为1500。
定义金额(n):
如果编号为0:
返回1个总和(n-1)
else:
返回0
new_sum=sum(1000)
打印(new_sum)
#输出
1000
修改递归次数的时候要注意修改递归次数是1500,递归深度达不到1500,也就是1400左右。默认递归次数为1000,递归深度小于1000,约为992。
如何控制递归的次数
经常使用递归。虽然可以解决很多问题,但是缺点也很明显,不一定能跳出死循环。这种情况可以通过控制递归的次数来避免。
Lua尝试了几种方法,
第一种
在方法中定义变量计数:
函数递归测试()
当地时间=0
如果乘以10,那么
次数=次数1
递归测试()
目标
如果times==0,则
打印(“外圆”)
目标
目标
执行,没有限制,因为局部变量每次都重置为0。
第二种
本地递归次数=0
函数recursionTest2()
如果递归次数为10,则
递归次数=递归次数1
递归测试2()
目标
目标
这个方法可以控制次数,但是变量需要在方法之外定义。在执行函数之前,这个变量需要设置为0,在递归方法中需要外包,比较繁琐。
第三种
函数递归(str,t)
str=str或“第一次”
t=t或0
t=t 1
打印(字符串,t)
如果t 10那么
递归( times: ,t)
目标
如果t==1,那么
打印(“外圆”)
目标
目标
递归时,传入一个自增变量。当达到阈值时,递归停止。执行最外层时,不需要传递参数。默认值为0,可以根据t的值判断当前的递归层数,在最外层执行之前,可以在递归结束时做其他事情,一举两得。
以上个人经验,希望给你一个参考,也希望你能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。