Son Haberler
Anasayfa / C# / C# Fibonacci dizisi ve sayılarını bulma

C# Fibonacci dizisi ve sayılarını bulma

Fibonacci dizisi, her sayının kendinden önceki ile toplanması sonucu oluşan bir sayı dizisidir. Bu şekilde devam eden bu dizide sayılar birbirleriyle oranlandığında altın oran ortaya çıkar, yani bir sayı kendisinden önceki sayıya bölündüğünde altın orana gittikçe yaklaşan bir dizi elde edilir.

 

/// <summary>
/// N adet fibonacci sayısını bir dizi olarak döner.
/// </summary>
static int[] Fibonacci(int n)
{
    var fibSequence = new int[n];
    var prev = 0;
    var curr = 1;
 
    for(var i = 1; i < n; i++)
    {
        fibSequence[i] = curr;
        curr = curr + prev;
        prev = curr - prev;  
    }
 
    return fibSequence;
}
 
/// <summary>
/// N index'li fibonacci sayısını dinamik programlama kullanarak döner.
/// </summary>
static int FibonacciNth(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
 
    var curr = 1;
    var prev = 0;
 
    var counter = n - 1;
 
    while(counter > 0)
    {
        curr = curr + prev;
        prev = curr - prev;
        counter--;
    }
 
    return curr;
}
 
/// <summary>
/// N index'li fibonacci sayısını Binet formülünü kullanarak döner.
/// https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
/// 1 ile 75 arasındaki n sayıları için geçerlidir.
/// </summary>
static int FibonacciNthClosedForm(int n)
{
    var rootOfFive = Math.Sqrt(5);
    var phi = (1 + rootOfFive) / 2; // (≈ 1.61803)
 
    return (int)Math.Floor(Math.Pow(phi, n) / rootOfFive + 0.5);
}