gpt4 book ai didi

javascript - 超过最大调用堆栈 RangeError

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:32 25 4
gpt4 key购买 nike

smallestInteger = (stack,numbers,k) => {
if (stack.length == 0){
stack.push(numbers[k]);
}
if (numbers[k] <= stack[stack.length-1]){
stack.pop();
stack.push(numbers[k]);
}
console.log(`stack is ${stack}`)
console.log("k:" + k);
return (k == 0) ? stack[stack.length-1] : smallestInteger(stack,numbers,k-1);
}

var smallestInteger = function(numbers) {
let stack = [];
let smallest = smallestInteger(stack ,numbers,numbers.length - 1);
return `the smallest integer is ${smallest}`;
}

var testCases = [[10,2,5,7,15,9], [1,2,3,4]];
for (let testCase of testCases){
console.log(smallestInteger(testCase));
}

运行 > node smallestInteger.js 给出了这个错误:

RangeError: Maximum call stack size exceeded
at smallestInteger (smallestInteger.js:17:31)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)
at smallestInteger (smallestInteger.js:19:17)

仅供引用,代码未到达 console.log 打印语句,我该如何解决?

这两个 smallestInteger 函数有不同的构造函数(第一个有 1 个参数,另一个有 3 个)就像覆盖一样,所以我不认为它们会相互替换。你在哪里看到它得到 2 个参数,它按预期得到 3 个参数。最后,smallestInteger 函数正在调用 smallestInteger 辅助函数,它在 ? 之后有一个退出条件,即 k == 0 所以它不应该永远持续下去。仍然出现同样的错误

最佳答案

Javascript 不允许重载函数。为此,您需要发挥创造力。例如:

function smallestInteger(stack,numbers,k){
if (arguments.length == 1) {
numbers = stack;
stack = [];
let smallest = smallestInteger(stack ,numbers,numbers.length - 1);
return `the smallest integer is ${smallest}`;
}

if (stack.length == 0){
stack.push(numbers[k]);
}
if (numbers[k] <= stack[stack.length-1]){
stack.pop();
stack.push(numbers[k]);
}
return (k == 0) ? stack[stack.length-1] : smallestInteger(stack,numbers,k-1);
}

var testCases = [[10,2,5,7,15,9], [1,2,3,4]];
for (let testCase of testCases){
console.log('testCase : ', testCase);
console.log(smallestInteger(testCase));
}

关于javascript - 超过最大调用堆栈 RangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174032/

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