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ステートメントがないと、関数は完了時に未定義を返します。

いいえ、それはケーキの上のアイシングだけでした。実際、このコードにはいくつかの論理エラーがあります。

  • insert()x関数は値( )を空のスタックに挿入しません
  • topr()機能がわかりにくい。空でないスタックの場合、最後の要素を返します(これはreturn stack[stack.length - 1]、たぶん、より効率的に実行できます。ただし、スタックが空の場合は、スタックにプッシュします(空の配列undefinedの結果であるため)。pop
于 2012-09-10T18:09:36.450 に答える
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);
于 2012-09-10T18:15:42.670 に答える