广告
返回顶部
首页 > 资讯 > 后端开发 > Python >解决python递归函数及递归次数受到限制的问题
  • 423
分享到

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

2024-04-02 19:04:59 423人浏览 薄情痞子

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的值判断当前的递归层数,可以在递归结束时,在最外层执行完之前做其他事情,一举两得。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

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

本文链接: https://www.lsjlt.com/news/118949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解决python递归函数及递归次数受到限制的问题
    目录递归函数及递归次数受到限制求和:sum=n+n(n-1)+…+1求阶乘:n!=1x2x3…xn解决问题的办法是修改可递归的次数如何控制递归的次数第一种...
    99+
    2022-11-11
  • python小球落地问题及解决(递归函数)
    目录问题什么是递归函数例子小球落地解题思路python递归函数介绍问题 一个球从 100 米高的自由落下,每次落地后反跳回原高度的一半。求第10次弹起的高度与途径的总路程 什么是递归...
    99+
    2022-11-11
  • python递归次数限制引起的错误
    使用BeautifulSoup时,可能会抛出如下错误: RecursionError: maximum recursion depth exceeded while calling a Python object 查看系统递归限制,调大即可...
    99+
    2023-01-31
    递归 次数 错误
  • js递归函数返回值问题如何解决
    在JavaScript中,递归函数的返回值问题可以通过以下方法解决:1. 使用全局变量:定义一个全局变量,递归函数在每次调用时更新全...
    99+
    2023-09-13
    js
  • java递归函数返回值问题怎么解决
    在递归函数中,可以使用一个参数或者一个全局变量来保存计算结果,然后在递归调用的过程中更新这个参数或者变量的值,最终返回最终的结果。例...
    99+
    2023-09-26
    java
  • C语言递归函数与汉诺塔问题怎么解决
    今天小编给大家分享一下C语言递归函数与汉诺塔问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。递归函数直接或者间接调...
    99+
    2023-07-02
  • Python基础学习之深浅拷贝问题及递归函数练习
    目录一、深浅拷贝问题二、递归函数练习1. 求阶乘2. 猴子吃桃问题3. 打印斐波那契数列一、深浅拷贝问题 在实际工作中,经常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作