python递归函数设置 python3递归函数( 二 )


为什么使用递归:
1 有时候使用递归写出来的程序很容易理解,很易读.
2 有些问题只有递归能够解决.非递归的方法无法实现.如:汉诺塔.
递归的条件:
并不是说所有的问题都可以使用递归解决,他必须的满足一定的条件 。即有一个出口点.也就是说当满足一定条件时,程序可以结束,从而完成递归调用,否则就陷入了无限的递归调用之中了.并且这个条件还要是可达到的.
递归有哪些优点:
易读,容易理解,代码一般比较短.
递归有哪些缺点:
占用内存资源多,费时,效率低下.
因此在我们写程序的时候不要轻易的使用递归,虽然他有他的优点,但是我们要在易读性和空间,效率上多做权衡.一般情况下我们还是使用非递归的方法解决问题.若一个算法非递归解法非常难于理解 。我们使用递归也未尝不可.如:二叉树的遍历算法.非递归的算法很难与理解.而相比递归算法就容易理解很多.
对于递归调用的问题,我们在前一段时间写图形学程序时 , 其中有一个四连同填充算法就是使用递归的方法 。结果当要填充的图形稍微大一些时,程序就自动关闭了.这不是一个人的问题,所有人写出来的都是这个问题.当时我们给与的解释就是堆栈溢出 。就多次递归调用占用太多的内存资源致使堆栈溢出,程序没有内存资源执行下去 , 从而被操作系统强制关闭了.这是一个真真切切的例子 。所以我们在使用递归的时候需要权衡再三.
python 递归限制 python不能无限的递归调用下去 。并且当输入的值太大,递归次数太多时,python 都会报错
首先说结论,python解释器这么会限制递归次数,这么做为了避免"无限"调用导致的堆栈溢出 。
tail recursion 就是指在程序最后一步执行递归 。这种函数称为 tail recursion function 。举个例子:
这个函数就是普通的递归函数,它在递归之后又进行了乘的操作 。这种普通递归,每一次递归调用都会重新推入一个调用堆栈 。
把上述调用改成 tail recursion function
tail recursion 的好处是每一次都计算完 , 将结果传递给下一次调用 , 然后本次调用任务就结束了,不会参与到下一次的递归调用 。这种情况下,只重复用到了一个堆栈 。因此可以优化结构 。就算是多次循环,也不会出现栈溢出的情况 。这就是 tail recursion optimization。
c和c++都有这种优化, python没有,所以限制了调用次数,就是为了防止无限递归造成的栈溢出 。
如果递归次数过多,导致了开头的报错,可以使用sys包手动设置recursion的limit
手动放大 recursionlimit 限制:
python递归函数def Sum(m): #函数返回两个值:递归次数 , 所求的值 if m==1:return 1,m return 1+Sum(m-1)[0],m+Sum(m-1)[1]cishu=Sum(10)[0] print cishudef Sum(m,n=1): ... if m==1:return n,m ... return n,m+Sum(m-1,n+1)[1]print Sum(10)[0] 10print Sum(5)[0] 5
【python递归函数设置 python3递归函数】关于python递归函数设置和python3递归函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读