Python中的绕过递归限制

问题描述 投票:0回答:1

我遇到了一个大问题,我需要数千层递归,但是python不允许我这样做。当我在Windows系统上构建它时,也很难找到解决方案。本质上,递归在堆栈上运行,在非基于UNIX的系统中,很难弄乱堆栈。

如果您正在寻找适用于UNIX的最简单的解决方案:

import sys
sys.setrecursionlimit(20000)

但是,正如我提到的,这在Windows上对我不起作用。我需要提出解决方案或切换操作系统。

python multithreading recursion backtracking
1个回答
0
投票
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()将在继续执行之前等待线程完成。这使得程序可以正常运行,只是使用线程的这个实例允许您欺骗堆栈限制。 
© www.soinside.com 2019 - 2024. All rights reserved.