Umut D.

Umut D.

Powered by Jekyll & Github

  • Programlar

  • Fibonacci Sayı dizisi, kendinden önceki iki ardışık sayının toplamının kendisinden sonraki sayıya eşit olmasıdır. Yani her sayı kendisinden önce gelen iki sayının toplamıdır. Örneğin; 0, 1, 1, 2, 3, 5, 8, 13, 21…

    fibonacci-sayilari

    Algoritma derslerinin vazgeçilmezi Fibonacci Sayıları/Dizisi… Bildiğiniz üzere Fibonacci Sayıları, her sayının kendinden öncekiyle toplanması sonucu oluşan bir sayı dizisi.

    Bilgisayarla ilgili bir bölüm okuyup Fibonacci Sayılarına, Iterative (Döngü) ve Recursive (Özyinelemeli) yaklaşımın bu güzide örneğine dair ödev yapmayan öğrenci yok denecek kadar azdır. Ben de üşenmedim, bu konu ve yaklaşıma dair ödevlerde kullanabileceğiniz, fikir alabileceğiniz, kaynak kodlarını kendinize mal edebileceğiniz bir program yazdım. Zira iteratif ve recursif yaklaşımla program çatır çatır çalışıyor ve rekursif yaklaşımının biraz daha yavaş olduğu çıplak gözle görülebiliyor. Zımbırtının özelliklerine gelecek olursak;

    • Iterative (Döngü) ve Recursive (Özyinelemeli)- yaklaşımıyla işlem yapabilme,
    • StopWatch özelliği ile işlem süresini milisaniye- düzeyinde hesaplama,
    • Lazım olur diye(!) metin belgesi olarak kaydetme.
    Fibonacci Sayıları
    Versiyon Durum
    Fibonacci Sayıları (Proje)
    Lisans Arşiv
    Boyut: 131 KB Boyut: 642 KB
    Gereksinimler: .Net Framework 4.0 Gereksinimler: .Net Framework 4.0
    Platform: Microsoft Windows Programlama Dili: C#
    İndir: Link İndir: Link

    Ek : Sayıların her iki biçimde nasıl hesaplandığını görmeye gelenler için Fibonacci.cs sınıfındaki kodlar:

    using System.Text;
    using System.Windows.Forms;
    
    namespace FibonacciSayilari
    {
        public class Fibonacci : Zaman
        {
            private int _sayi;
    
            public int Sayi
            {
                get => _sayi;
                set
    
                {
                    if (value <= 37)
                        _sayi = value;
                    else
                    {
                        MessageBox.Show(@"Sayıyı abartmasak hoş olmaz mı!", @"Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        _sayi = 0;
                    }
                }
            }
    
            private readonly StringBuilder _sayilar = new StringBuilder();
    
            public StringBuilder Iteratif(int donguSayisi)
            {
                Zamanlayici.Start();
    
                IteratifDongu(donguSayisi);
                IteratifSure = Sonlandir();
    
                return _sayilar;
            }
    
            // I. yol (Iteratif - Döngü)
            private void IteratifDongu(int donguSayisi)
            {
                int oncekiSayi = 0, sonrakiSayi = 1;
                for (int i = 0; i < donguSayisi; i++)
                {
                    int sonuc = oncekiSayi + sonrakiSayi;
                    oncekiSayi = sonrakiSayi;
                    sonrakiSayi = sonuc;
    
                    _sayilar.Append(sonuc + @"  ");
                }
            }
    
            private double Sonlandir()
            {
                Zamanlayici.Stop();
    
                return Zamanlayici.Elapsed.Milliseconds;
            }
    
            public StringBuilder Recursive(int donguSayisi)
            {
                Sifirla();
                Zamanlayici.Start();
    
                for (int i = 1; i <= donguSayisi; i++)
                    _sayilar.Append(RecursiveDongu(i) + @"  ");
    
                RecursiveSure = Sonlandir();
    
                return _sayilar;
            }
    
            // II. yol (Recursive - Özyinelemeli)
            private int RecursiveDongu(int donguSayisi)
            {
                if (donguSayisi <= 1)
                    return 1;
    
                return RecursiveDongu(donguSayisi - 1) + RecursiveDongu(donguSayisi - 2);
            }
    
            private void Sifirla()
            {
                Zamanlayici.Reset();
                _sayilar.Clear();
            }
        }
    }