2017-09-29 6 views
0

私は1週間の回帰の回りに頭をラッピングしています。そして、私はそれがどのように機能するかについてよく理解していると言いたい。私が苦労している詳細は、返されているものです。 8行目でreturn str;はstrを配列として吐き出しますか?もしそうなら、繰り返しごとにnewArrにプッシュできませんか?現在、私の出力は[undefined]です。なぜこれが正しいのか理解したいと思います。ほとんどのプログラミング言語で複数の反復の復帰方法の理解

function permAlone(str, n, output = []) { 
 

 
    var n = n || str.length 
 

 
    if (n == 1) { 
 
    // console.log(str) 
 
    return str 
 
    } else { 
 
    for (var i = 1; i <= n; i++) { 
 
     permAlone(str, n - 1) 
 
     if (n % 2) { 
 
     var j = 1 
 
     } else { 
 
     j = i 
 
     } 
 
     swap(str, j - 1, n - 1) 
 

 
    } 
 
    } 
 
} 
 

 
function swap(a, i, j) { 
 
    var temp = a[i] 
 
    a[i] = a[j] 
 
    a[j] = temp 
 
} 
 

 

 
var newArr = []; 
 
newArr.push(permAlone('abc'.split(''))); 
 
console.log(newArr);

+0

これは、すべての場合で同じように機能し、現在の関数の実行を停止し、関数にどこに置かれていても戻り値を呼び出し元に送信します。 – Teemu

+0

私の質問は、それはstr配列を出力するのでしょうか?私はなぜそれがnewArrにプッシュされていないのか分かりません。 – manuel

答えて

1

、return文は、「戻る」または値はサブルーチンから戻ってくる変数または他の情報である「戻り値」、のいずれかです。 return文は必要な結果を返します。次の例をリターンで試してみてください。 1)返品あり。

function sum(){ 
var test = 5 + 6; 
return test; 
} 
console.log(sum()); 

2)返品なし。

+0

ただし、予期しない結果が生じることがあります。 – Teemu

+0

ロジックの構造については、クリアする必要があります。次に予期しない結果の問題を解決することができます。 – Talal

+0

また、関数から何も返さないので、newArrにプッシュされていません。 – Talal