2016-04-05 30 views
1

this one gibi belirli bir fibonacci dizisi oluşturulmasında birkaç yayın gördüm. Bununla birlikte, özyineleme kullanarak verilen bir n için dizinin fibonnaci sayılarının nasıl üretileceğini (bir dizi döndür) anlayamıyorum. Açıkçası neyi işe yaramadı, ama bunu nasıl yapacağımı gerçekten anlayamıyorum.Fibonacci dizisinin arrayını nasıl tekrar oluşturabilirim?

var fibArray = function(n) { 
    var f = []; 
    n < 2 ? f.push(n) : f.push(fibArray(n-1) + fibArray(n-2)); 
    return f; 
}; 
+4

Tam anlamıyla ilk arama sonucu ~ [Fibonacci özyinelemeli işlevi nasıl çalışır?] (Http://stackoverflow.com/questions/8845154/how-does-the-the-fibonacci-recursive-function-work) – Phil

+0

aynı soru değil, o bir dizi geri dönmek istedim – JordanHendrix

+2

@Phil değil% 100 emin, ama bu erken bir yakın olmuş olabilir, ya da yanlış çift – JordanHendrix

cevap

2

Her bir işlev çağrısını boş bir diziyle başlattığınıza ve ardından yalnızca 1 üye eklediğinize dikkat edin. Bu işe yaramaz.

Yeni elemanı, önceki fib(n - 1) adımından döndürülen diziye eklemeniz gerekir. böylece gibi:

function fib (n) { 
    if (n < 2) { 
     return [1]; 
    } 
    if (n < 3) { 
     return [1, 1]; 
    } 

    var a = fib(n - 1); 
    a.push(a[n - 2] + a[n - 3]); 
    return a; 
}; 

nth sayı dizisinde pozisyon n - 1 görünür. Bu, n - 2 = n - 1 - 1 ve n - 3 = n - 2 - 1'u doğrular.

+1

@Omarjmh İşaretlediğiniz için teşekkürler! Sabit:) – SlySherZ