gpt4 book ai didi

javascript - 避免树行走递归的最佳方法

转载 作者:行者123 更新时间:2023-11-30 06:00:36 24 4
gpt4 key购买 nike

所以我对 javascript 还很陌生,我正在尝试为 friend 编写一个特殊的排类代码。它目前的工作方式如下:

function walk(currentDay) {
var today = allWorkDays[currentDay]; // An array of all workdays we need to schedule
var vertices = fetchCombinationsForToday(today); // Fetch an array of 0 length or more
// containing possibilities for the day
// according to rules set by user
for (var i=0; i<vertices.length; i++) {
[we add the vertices[i] to a running array]
walk(currentDay+1);
}
if (currentDay == sumOfAllDays) { // We are at a leaf
analyzeSchedule(); // This will keep a copy of the current schedule
// if it has a higher score than X
}
[some business to pop the last node/day we added to our global array]
}

现在评论中指定的规则是通常分析最后 5-10 个最后添加的元素(天)并返回今天可能是类次的规则。

我这里的问题是,我希望程序即使有超过一千天的数组也能得出时间表,但由于递归,我会超过函数调用限制。有没有办法在 javascript 中不使用递归来遍历树?我似乎找不到一个,尽管大多数人都说可以通过递归解决的问题可以通过循环解决,反之亦然。

请记住,顶点数组在树的早期很大(20-30 个元素),但很快就会变小(0-5 个元素)。我从来没有运行过这段代码[编辑:并得到一个“达到函数调用限制”的错误],顺便说一下,它现在都是理论[编辑:我将达到它的事实]。

最佳答案

JavaScript Arrays提供将值压入/弹出和将值移入/移出它们的开头和结尾的方法,因此您可以像队列一样使用它们。例如:

var a = [0, 1, 2];
a.push(3); // => 3
a; // [0, 1, 2, 3]
a.shift(); // => 0
a; // [1, 2, 3]
a.pop(); // => 3
a; // [1, 2]

通过这种方式,您可以遍历树结构并通过从数组中插入和弹出/取消移位来跟踪要访问的节点。

关于javascript - 避免树行走递归的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8852115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com