我对python很新,并且几乎没有关于递归错误的问题:“RuntimeError:超出了最大递归深度”。 我知道这个错误是在python中避免堆栈溢出。 现在我已经制作了示例代码:
$result = sqlsrv_query($conn,$sql);
$row = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC);
print_r(($row['uniname1'])); exit;
现在如果将递归限制设置为11,则代码将运行,不会出现错误。 输出:
import sys
def print1():
print("1")
return print2()
def print2():
print("2")
return print3()
-------------
def print3() - def print7() <- (wrote here like this to save some place)
-------------
def print8():
print("8")
return print9()
def print9():
print("9")
def main():
sys.setrecursionlimit(11)
print sys.getrecursionlimit()
print1()
if __name__ == "__main__":
main()
如果我将递归限制设置为10,则会出现错误:
11
1
2
3
4
5
6
7
8
9
我的问题是,是否有任何解决方案可以清除递归或其他解决方案,如何编写与此类似的代码,其中一个函数调用另一个函数,并且不需要最后一个函数,其中调用当前函数。 例如,我可以清除print2()处的递归,并以递归限制为10运行代码。 我想写一个代码,其中总是函数调用另一个函数,所以为了节省RAM我想我需要一些替代或其他解决方案。 代码也可以多次调用相同的函数。所以后来可能会运行3个不同的相同功能块,这就是我想要避免的。
答案 0 :(得分:2)
创建一个循环,调用你返回的任何thunk:
def main():
toDo = print1
while toDo:
toDo = toDo()
print1
在不调用的情况下返回下一个调用的内容:
def print1():
print("1")
return print2
它唯一需要停止的是返回False
而不是下一个要调用的函数。
每次通话都会倒回堆栈,永不累积。