【发布时间】:2016-12-22 12:51:21
【问题描述】:
我试图理解使用给出的递归对堆栈元素进行排序 http://www.geeksforgeeks.org/sort-a-stack-using-recursion/ 不允许使用任何循环结构,例如 while、for..etc。我们只能在 Stack S 上使用以下 ADT 函数:
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
【问题讨论】:
-
geeksforgeeks.org/sort-a-stack-using-recursion 我正在尝试在 javascript 中实现这个算法
-
您需要使用
var来获取本地临时变量,而不是全局变量。你也有混淆堆栈是空的,堆栈有sortedInsert中的元素。
标签: javascript sorting recursion stack