【发布时间】:2019-08-06 00:39:31
【问题描述】:
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中同时存在两个同名的函数(即使具有不同的签名)。给他们一个独特的名字。
-
你有
smallestInteger = (stack,numbers,k) => {... 然后是var smallestInteger = function(numbers) {... 所以只有 SECOND 函数存在,因为它只是无限地递归......错误......你不能在同一个作用域内调用两个同名函数,javascript怎么知道调用哪个函数? -
他们肯定是在互相替换。 Javascript 不会通过签名来区分函数!
标签: javascript algorithm recursion stack