python 求助
发布网友
发布时间:2022-04-26 16:10
我来回答
共4个回答
懂视网
时间:2022-04-19 00:50
在python里递归最多达到多少次?因为在跑程序的时候,次数有时多有时少,以前没有想过这个问题。那就自己动手在验证验证, 代码如下:
def recursion(n):
if(n <= 0):
return
print n
recursion(n - 1)
if __name__ == "__main__":
recursion(1000)
当在我自己的机器运行以上代码时,发现最多能打印到998,然后就会抛出 “RuntimeError: maximum recursion depth exceeded” 的错误了。 嘿,还真有限制。但转念一想,python不会这么弱吧。经过一番查找,发现这是python专门设置的一种机制用来防止无限递归造成Python溢出崩溃, 最大递归次数是可以重新调整的。 (http://docs.python.org/2/library/sys.html#sys.setrecursionlimit),修改代码如下:
import sys
sys.setrecursionlimit(1500) # set the maximum depth as 1500
def recursion(n):
if(n <= 0):
return
print n
recursion(n - 1)
if __name__ == "__main__":
recursion(1200)
热心网友
时间:2022-04-18 21:58
在new_L处递归了(自己调用自己,在Python里递归上限默认是1000次,效率也不高,可见这只是程序员蛋疼出来的,或者只是教学代码)
先把表头作为temp,再把去掉第一项的L传给reverse,reverse又会再调用自己,于是不断地调用自身。
直到只剩一项时, 由"if len(L) == 1: return L"破坏递归,向后返回.
然后边返回,边把temp附到表后.直到第一个reverse,于是最终返回的是倒过来的L.
假如你传入[1,2,3],演示一下执行顺序:
temp = 1
new_L = reverse([2, 3])
.. temp = 2
.. new_L = reverse([3])
.. return [3]
.. return [3, 2]
return [3, 2, 1]
#缩进表示名称空间,由LGB(Local-Global-Buildin)规则, 不同名称空间中temp不是同一变量
热心网友
时间:2022-04-18 23:16
这是一个递归函数,可用作字符串的倒置,明白不?~~~
例子,"abcd"
首先,进入时候判断,L的长度是不是1,如果是1,那么,就没必要倒置了,倒置结束,退出函数。
不是1,进入else部分, temp 赋值第一个值a,然后用bcd,在调用,之后cd调用,之后d调用,发现长度是1,返回这个时候,new_L=='d'。然后依次到来的是c,b,a .new_L最后为dcba。 去补充下递归的知识,理解这个就很容易了
热心网友
时间:2022-04-19 00:51
楼主不妨试试这个函数的功能
比如:
#!python
def reverse(L):
if len(L) == 1:
return L
else:
temp = L[0]
new_L = reverse(L[1:])
new_L.append(temp)
return new_L
if __name__ == "__main__":
test = [1,2,3]
test2 = ['a','b','c']
print reverse(test),'\n',reverse(test2)
pass
运行一下接可以按结果 分析程序了
注意::另外对程序的分析 已经有人做了分析 我是借用 kukumaiwu 朋友的
def reverse(L): //定义一个方法reverse,其实看英语意思就知道,是翻转,参数为L
if len(L) == 1://如果L的长度为1,不做翻转直接返回,比如L=a那么返回a
return L//返回语句
else:
temp = L[0]//否则的话取L当中的第一个字符,把它赋值给temp
new_L = reverse(L[1:])//然后把L当中剩下的内容在使用reverse方法来判断,需要翻转的话继续执行,直到不需要翻转为止,然后赋值给new_L
new_L.append(temp)//最后把刚才取下的第一个字符追加到new_L之后
return new_L//返回new_L,这个时候new_L就已经是翻转好的字符串了