python函数递归 python函数递归调用

Python算法-爬楼梯与递归函数

可以看出来的是,该题可以用斐波那契数列解决。

创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为盘锦企业提供专业的成都网站设计、做网站,盘锦网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

楼梯一共有n层,每次只能走1层或者2层,而要走到最终的n层。不是从n-1或者就是n-2来的。

F(1) = 1

F(2) = 2

F(n) = F(n-1) + F(n-2) (n=3)

这是递归写法,但是会导致栈溢出。在计算机中,函数的调用是通过栈进行实现的,如果递归调用的次数过多,就会导致栈溢出。

针对这种情况就要使用方法二,改成非递归函数。

将递归进行改写,实现循环就不会导致栈溢出

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 递归函数基例

所谓基例就是不需要递归就能求解的,一般来说是问题的最小规模下的解。

例如:斐波那契数列递归,f(n)

=

f(n-1)

+

f(n-2),基例是1和2,f(1)和f(2)结果都是1

再比如:汉诺塔递归,基例就是1个盘子的情况,只需移动一次,无需递归

递归必须有基例,否则就是无法退出的递归,不能求解。


分享名称:python函数递归 python函数递归调用
网站地址:http://scyanting.com/article/dosjchc.html