2016-03-22 14 views
0

Ben yığın fonksiyonu içine bir dize dizisi ekledikten döndürmez. function generate(), console.log(permut); çıkışını düzgün yazdırmasına rağmen, herhangi bir veri göndermez. permut = permut.concat(arr);Benim fonksiyon şey

var arrStr = ['a', 'a', 'b']; 
    var generated = []; 
    generate(arrStr, arrStr.length, generated); 
    console.log(generated); 


    function generate(arr, n, permut) { 
    if (n === 1) { 
     permut = permut.concat(arr); 
     //console.log(permut); 
    } else { 
     for (var i = 0; i < n; i++) { 
     generate(arr, n - 1, permut); 
     if (n % 2 === 0) { 
      swap(i, n-1, arr); 
     } else { 
      swap(0, n-1, arr); 
     } 
     } 
    } 
    } 

    function swap(a, b, ar) { 
    var temp = ar[b]; 
    ar[b] = ar[a]; 
    ar[a] = temp; 
    } 

Sürüm 1 dönüşleri ile return arr

var arrStr = ['a', 'a', 'b']; 
    var generated = generate(arrStr, arrStr.length); 
    console.log(g2); 


    function generate(arr, n) { 
    if (n === 1) { 
     console.log(arr); 
     return arr; 
    } else { 
     for (var i = 0; i < n; i++) { 
     generate(arr, n - 1); 
     if (n % 2 === 0) { 
      swap(i, n-1, arr); 
     } else { 
      swap(0, n-1, arr); 
     } 
     } 
    } 
    } 

    function swap(a, b, ar) { 
    var temp = ar[b]; 
    ar[b] = ar[a]; 
    ar[a] = temp; 
    } 

Versiyon 2

Sürüm 1 generated değişken ve sürüm 2 getirileri boş bir dizi için tanımlanmamış.

ben bir şey alamadım hala bir test dizisi 'asd' dönmeye çalıştı ama ettik. bir JavaScript işlev içinde bildirilen

+2

Sen yinelemeli işlevi çağırmak, ancak özyinelemeli aramanın sonucu ne yapacağız ? '' 'Yolunda aslında bir şey döndürüyor musun? –

+0

İşlev düzgün çalışıyor. '' 'Yolunda' n', sorunlu geri dönüşün yürütüldüğü n === 1' olana kadar azaltılır. 'N! == 1' (yani' else' kısmen) bir 'return' deyimi yoksa göstermenizi kodunda – AchiPapakon

+1

. Yani işlev hiçbir şey döndürmez. Bir değer döndürmek isterseniz, aslında 'return' ifadesini kullanmanız gerekir. 'if… else' ikili ise, o da * ya * bir şey yapar (durum doğruysa) veya başka bir şey yapar *. Fonksiyonunuzda, * başka bir şey * bölümü ilk ilk arama tarafından yürütülür ve hiçbir şey döndürmez. Kodda bir hata ayıklayıcısında adım atmanızı öneririm. –

cevap

0

Değişkenler, işlevine YEREL hale gelir. Javascript kapsamları'a bakın. Başka bir deyişle, fonksiyon içindeki fonksiyon parametresinde yapacağınız değişiklikler, parametre değişkenini fonksiyonun dışında etkilemez.

Sadece algoritma sonunda oluşturulan nesneyi döndürür.

Örnek:

var n = 1; 
incrementByOne(n); 
console.log(n) //still 1 

function incrementByOne(number) { 
    number++; 
} 

Çözüm sonucu dönün ve bir değişken ile bunu elde etmektir:

var n = 1; 
n = incrementByOne(n); 
console.log(n) //now it's 2 

function incrementByOne(number) { 
    return number++; 
} 
+0

O = üretmek oluşturulan ben var 'yaptığım şey bu mudur (arrStr, arrStr.length);' – AchiPapakon

+0

Ne algoritması ile yapmaya çalışıyorsun? –