如何防止RangeError:在有限的递归函数中超过了最大调用堆栈大小?|JavaScript



我正在尝试制作一个Connect 4 Bot,它使用最小最大算法来运行。突然浏览所有可能的游戏状态对我的程序来说太多了,所以我需要一种方法来防止错误的发生。

我看到您可以使用setTimeout((使大型递归函数在JavaScript中运行,但我并没有真正找到理解它的方法

因此,我想问是否有人可以举一个例子,说明如何将setTimeout((实现为一个递归函数,使其可运行。

(很抱歉可能出现英语错误。(

我认为更好的方法是使用所谓的迭代深化。我根本不懂Javascript,所以请原谅我在pseduocode/Python中发帖。

start_time = current_time
for depth in range(1, inf):
score = minimax(depth, ......)
if current_time - start_time >= max_allowed_time:
break

因此,当你开始循环时,你会得到时间。然后,你会越来越深(从深度1开始(,直到当前时间减去你开始循环的时间超过你指定的最大时间值。现在,它将在给定的时间限制内尽可能深入地搜索。

乍一看,这可能比搜索给定的深度要慢。但是,如果以后实现移动排序和换位表,它实际上会加快代码的速度。由于每个深度的时间都呈指数级增长,因此搜索第一个深度1、第二个深度2、第三个深度所需的时间比立即搜索深度3所需的大得微不足道。

希望我能说清楚,英语也不是我的母语:(

最新更新