资讯专栏INFORMATION COLUMN

处理python递归函数及递归算法频次受限制难题

89542767 / 276人阅读

  本文关键阐述了处理python递归函数及递归算法频次受限制难题,具有非常好的实用价值,希望能帮助到大家。如有误或者未考虑到真正的地区,望鼎力相助


  递归函数及递归算法频次受限制


  一个函数在外部启用自身,那么这样的函数是递归函数。递归算法要反复应用自身,每递归算法一回,越近最后的值。如果一个难题需要由很多类似小问题处理,可以选择应用递归函数。伴随着递归算法的深层次,难题经营规模对比之前都应该所减少。return函数自身的方法保证了递归算法的不断开展,但如果没有很明确的完毕标准,递归算法会无尽继续下去。因此当已经是问题改进的水平,应当告知函数公式完毕递归算法,这个时候就需要很明确的完毕标准。


  比较常见的2个递归算法事例:求合、求阶乘n!


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


  defsum(n):
  ifn>0:
  returnn+sum(n-1)
  else:
  return0
  new_sum=sum(10)
  print(new_sum)
  #output
  55


  求阶乘:n!=1x2x3…xn


  deffactorial(n):
  ifn==1:
  return1
  else:
  returnn*factorial(n-1)
  new_sum=factorial(5)
  print(new_sum)
  #output
  120


  应用递归函数需要注意递归算法频次默认限制为1000,如果递归算法频次较多会导致栈溢出难题


  比如


  defsum(n):
  ifn>0:
  return1+sum(n-1)
  else:
  return0
  new_sum=sum(1000)
  print(new_sum)
  会报RecursionError:maximumrecursiondepthexceededincomparison的不正确


  解决问题的方法是改动可递归算法次数


  importsys
  sys.setrecursionlimit(1500)#可递归算法频次修改为1500
  defsum(n):
  ifn>0:
  return1+sum(n-1)
  else:
  return0
  new_sum=sum(1000)
  print(new_sum)
  #output
  1000


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


  如何控制递归算法次数


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


  用lua尝试了几种方法,


  第一种


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


  functionrecursionTest()
  localtimes=0
  iftimes<10then
  times=times+1
  recursionTest()
  end
  iftimes==0then
  print("outerround")
  end
  end


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


  第二种


  localrecurTimes=0
  functionrecursionTest2()
  ifrecurTimes<10then
  recurTimes=recurTimes+1
  recursionTest2()
  end
  end

  此方法能控制频次,可是自变量必须界定在方式身体之外,执行函数前都要先将这一自变量设成0,必须在递归方法业务外包一层层,较为繁杂。


  第三类


  functionrecursion(str,t)
  str=stror"firsttime"
  t=tor0
  t=t+1
  print(str,t)
  ift<10then
  recursion("times:",t)
  end
  ift==1then
  print("outerround")
  end
  end


  在递归算法时传到1个自动编号自变量,做到阀值时终止递归算法,实行外层时不用传参,初始值为0,且可以根据t的值分辨现阶段的递归算法叠加层数,还可以在递归算法结束后,在外层执行完之前做过别的事,一箭双雕。


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128850.html

相关文章

  • 用 PHP 的方式实现的各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    Karrdy 评论0 收藏0
  • 用 PHP 的方式实现的各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    pakolagij 评论0 收藏0
  • 用 PHP 的方式实现的各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    leonardofed 评论0 收藏0
  • 首次超越LSTM : Facebook 门卷积网络新模型能否取代递归模型?

    摘要:得到的结果如下上图是门卷积神经网络模型与和模型在数据集基准上进行测试的结果。虽然在这一研究中卷积神经网络在性能上表现出了对递归神经网络,尤其是的全面超越,但是,现在谈取代还为时尚早。 语言模型对于语音识别系统来说,是一个关键的组成部分,在机器翻译中也是如此。近年来,神经网络模型被认为在性能上要优于经典的 n-gram 语言模型。经典的语言模型会面临数据稀疏的难题,使得模型很难表征大型的文本,...

    高胜山 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<