这是我的代码:
function sort(stack){
if(stack.length > 0){
var x = stack.pop();
sort(stack);
insert(x,stack);
}
}
function insert(x,stack){
if(stack.length>0){
var tops = topr(stack);
if(tops>x){
stack.pop();
insert(x,stack);
stack.push(tops);
}else{
stack.push(x);
}
}
}
function topr(stack){
var t = stack.pop();
stack.push(t);
return t;
}
var stack = [1,3,2];
sort(stack);
console.log(stack);
我必须在不使用数组(递归)的情况下构建它。 但它在控制台中返回void / aka no。
修改: 完整的解决方案:
function sort(stack) {
if(stack.length > 0) {
var x = stack.pop();
sort(stack);
insert(x,stack);
}
return stack;
}
function insert(x,stack){
if(stack.length>0){
var tops = topr(stack);
if(tops>x){
stack.pop();
insert(x,stack);
stack.push(tops);
}else{
stack.push(x);
}
}else{
stack.push(x);
}
}
function topr(stack){
var t = stack.pop();
stack.push(t);
return t;
}
var stack = [1,3,2];
stack = sort(stack);
console.log(stack);
答案 0 :(得分:2)
因为它最终没有 return stack
,也许?如果没有显式return
语句,函数将在完成时返回undefined。
不,这只是锦上添花。实际上,此代码中存在多个逻辑错误:
insert()
函数不会将值(x
)插入空堆栈topr()
功能令人困惑。对于非空堆栈,它返回它的最后一个元素(我可以用return stack[stack.length - 1]
更有效地完成它。但是如果stack为空,它会将undefined
推送到它(因为它是结果pop
空数组)。答案 1 :(得分:0)
正如raina77ow已经提到的那样,你没有从sort方法返回任何东西。然后使用您的新更新,您只更新堆栈的本地版本;因此,如果从sort方法返回堆栈,则应该会收到预期的结果。
function sort(stack) {
if(stack.length > 0) {
var x = stack.pop();
stack = sort(stack);
insert(x,stack);
}
return stack;
}
var stack = [1,3,2];
stack = sort(stack);
console.log(stack);