绕过python中的递归限制

我遇到了一个大问题,我需要数千层递归,但是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()将在继续执行之前等待线程完成。这使得程序可以正常运行,只是使用线程的这个实例允许您欺骗堆栈限制。

点赞
评论