i=900
def a():
global i
i-=1
s="我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?"
if i==0:
input()
return
return a()
a()
4812KB内存占用,添加了S后,4896
问题一,递归深度限制
import sys
sys.setrecursionlimit(100000) #例如这里设置为十万
解决报错RecursionError: maximum recursion depth exceeded in comparison
我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?
i=900
def a():
global i
i-=1
s="我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?"
return
while 1:
a()
if i==0:
input()
break
改
3908KB内存占用 3952
即便添加了S这一个变量,两段代码增加的内存一样,那么
i=900
def a():
global i
i-=1
s="我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?"
if i==0:
input()
return
return a()
a()
i=900
def a():
global i
i-=1
s="我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?"
if i==0:
input()
return
a()
return
a()
4912,多了一点,可能是因为内容一样,所以指针一样?那么字符串每次微小变化的话呢!?
i=900
def a():
global i
i-=1
s="我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?"+str(i)
if i==0:
input()
return
return a()
a()
i=900
def a():
global i
i-=1
s="我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?"+str(i)
if i==0:
input()
return
a()
return
a()
i=900
def a():
global i
i-=1
s="我写这个函数是因为想到了些问题,例如之前写的递归函数,都是在函数中间,调用自身,获取数值,而这个函数,我其实是为了方便,如果遇到一个问题,就改变运行参数,于是需要重新调用这个函数,在新的参属下。其实这个用goto很爽,但是一方面是没有学到,另一方面goto貌似是个邪道,于是想尝试自己解决下。但即便是最后一句,使用的是return,那也算是递归?也就是说,调用新的一次函数的同时,当前函数没有被释放吗?"+str(i)
return
while 1:
a()
if i==0:
input()
break
5336
5352
3928
这次递归明显比之前高出不少,确定。但是return 函数,这个在没有获得函数返回值前,是不会释放当前函数的。
所以递归的层数限制以及时空限制。
我在代码的最后边再加个input,完全递归展开和程序结尾,内存变化
5324 - 4812