
正文
python递归函数次数 python 递归函数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
python递归 例:把10x0中 x转成1和0 输出1010 和1000
我不明白的是,为什么会只能处理10个以下的x。虽然python有1000次的递归次数上限,但你的问题所需要的递归次数是由x的个数决定的,应该还远没有达到递归上限。所以,只能认为你的写法是错误的。
def f(string):
if 'x' in string:
strlist = string.split()
strtmp = ''
for i in range(len(strlist)):
strtmp += strlist[i].replace('x', '0', 1)
strtmp += ' '
strtmp += strlist[i].replace('x', '1', 1)
strtmp += ' '
return f(strtmp.strip())
else:
return string
a = 'xxxxxxxxxxx'
print f(a)
相关问答
Q1: Python算法-爬楼梯与递归函数
可以看出来的是,该题可以用斐波那契数列解决。
楼梯一共有n层,每次只能走1层或者2层,而要走到最终的n层。不是从n-1或者就是n-2来的。
F(1) = 1
F(2) = 2
F(n) = F(n-1) + F(n-2) (n=3)
这是递归写法,但是会导致栈溢出。在计算机中,函数的调用是通过栈进行实现的,如果递归调用的次数过多,就会导致栈溢出。
针对这种情况就要使用方法二,改成非递归函数。
将递归进行改写,实现循环就不会导致栈溢出
Q2: python 递归限制
python不能无限的递归调用下去。并且当输入的值太大,递归次数太多时,python 都会报错
首先说结论,python解释器这么会限制递归次数,这么做为了避免"无限"调用导致的堆栈溢出。
tail recursion 就是指在程序最后一步执行递归。这种函数称为 tail recursion function。举个例子:
这个函数就是普通的递归函数,它在递归之后又进行了 乘 的操作。 这种普通递归,每一次递归调用都会重新推入一个调用堆栈。
把上述调用改成 tail recursion function
tail recursion 的好处是每一次都计算完,将结果传递给下一次调用,然后本次调用任务就结束了,不会参与到下一次的递归调用。这种情况下,只重复用到了一个堆栈。因此可以优化结构。就算是多次循环,也不会出现栈溢出的情况。这就是 tail recursion optimization 。
c和c++都有这种优化, python没有,所以限制了调用次数,就是为了防止无限递归造成的栈溢出。
如果递归次数过多,导致了开头的报错,可以使用 sys 包手动设置recursion的limit
手动放大 recursionlimit 限制:
Q3: 在Python 中怎样让一个递归函数返回此函数的总递归次数
def Sum(m):
#函数返回两个值:递归次数python递归函数次数,所求python递归函数次数的值
if m==1:return 1,m
return 1+Sum(m-1)[0],m+Sum(m-1)[1]
cishu=Sum(10)[0]
print cishu
def Sum(m,n=1):
... if m==1:return n,m
... return n,m+Sum(m-1,n+1)[1]
print Sum(10)[0]
10
print Sum(5)[0]
5
python递归函数次数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python 递归函数、python递归函数次数的信息别忘了在本站进行查找喔。






