Я пытаюсь понять сортировку элементов стека с использованием рекурсии, приведенной в http://www.geeksforgeeks.org/sort-a-stack-using-recursion/ Использование любых конструкций циклов, таких как while, for..etc не допускается. Мы можем использовать только следующие функции ADT на Stack S:Элементы сортировки стека с использованием javascript
is_empty (S): проверяет, пуст ли пуст или нет.
push (S): добавляет новый элемент в стек.
pop (S): удаляет верхний элемент из стека.
top (S): Возвращает значение верхнего элемента. Обратите внимание, что эта функция не удаляет элемент из стека. Я попытался ниже, но получаю ошибку
var stack = [-3, 14, 18, -5, 30];
function sortStack() {
if (stack.length > 0) {
temp = stack.pop();
sortStack();
sortedInsert(temp, stack);
}
}
function sortedInsert(element, stack) {
if (stack.length > 0 || element > stack[stack.length - 1]) {
stack.push(element);
} else {
temp = stack.pop();
sortedInsert(element, stack);
stack.push(temp);
}
}
sortStack();
console.log(stack);
RangeError: Maximum call stack size exceeded
at sortedInsert:12:22
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
http://www.geeksforgeeks.org/sort-a-stack-using-recursion/ Я пытаюсь реализовать этот алгоритм в JavaScript –
вам нужно использовать 'var' вместо этого, если вы используете глобальную переменную temp local. Кроме того, у вас путаный стек пуст, в стеке есть элементы в 'sortedInsert'. – Sylwester