0

这是我的代码:

 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 。

编辑:完整的工作解决方案:

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);
4

2 回答 2

2

因为它return stack最终没有,也许?如果没有显式return声明,函数将在完成时返回 undefined。

不,这只是锦上添花。其实这段代码有几个逻辑错误:

  • insert()函数不会将值 ( x) 插入空堆栈
  • topr()功能混乱。对于非空堆栈,它返回它的最后一个元素(return stack[stack.length - 1]我猜这可以用 just 更有效地完成。但如果堆栈为空,它会推undefined送到它(因为它是pop空数组的结果)。
于 2012-09-10T18:09:36.450 回答
0

正如raina77ow 已经提到的,您不会从您的排序方法中返回任何内容。然后,通过您的新更新,您只会更新堆栈的本地版本;因此,如果您从排序方法返回堆栈,您应该会收到预期的结果。

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);
于 2012-09-10T18:15:42.670 回答