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
, поэтому она не должна продолжаться вечно. По-прежнему получаю ту же ошибку