我遇到了一个大问题,我需要数千层递归,但是python不允许我这样做。当我在Windows系统上构建它时,也很难找到解决方案。本质上,递归在堆栈上运行,在非基于UNIX的系统中,很难弄乱堆栈。
如果您正在寻找适用于UNIX的最简单的解决方案:
import sys
sys.setrecursionlimit(20000)
但是,正如我提到的,这在Windows上对我不起作用。我需要提出解决方案或切换操作系统。
import threading
def recurThread(x,y,z):
if x <= 1:
y.append(x)
if z[0] != 1:
new_y = []
z[0] -= 1
new_t = threading.Thread(target=recurThread, args=(900, new_y, z))
new_t.start()
new_t.join()
y += new_y
else:
return
y.append(x)
return recurThread(x-1, y, z)
y = []
z = [50]
x = threading.Thread(target=recurThread, args=(900, y, z))
x.start()
x.join()
total = 0
print(len(y))
for i in y:
total += i
print(total)
这是基本思想。需要注意的是,如果要从线程中获取值,则需要将它们存储(并传递)为可变对象(如列表)。
如果您不熟悉线程(例如我),要注意的另一件事是,您需要.start()您的线程。更重要的是,.join()将在继续执行之前等待线程完成。这使得程序可以正常运行,只是使用线程的这个实例允许您欺骗堆栈限制。