Fibonacci Sayıları (Fibonacci Numbers)
Yazan : Şadi Evren ŞEKER
Bilgisayar bilimlerinde çok sık kullanılan sayı serileridir. Bu sayıların önemi özyineli (recursive) fonksiyonlar ile kolayca yazılabilmesidir.
Fibonacci serisinin ilk iki sayısı 1′dir. Diğer sayılar ise kendinden önceki iki sayının toplamıdır.
fib0=1
fib1=1
fib2=fib0 + fib1 = 1 + 1 = 2
fib3=fib1 + fib2 = 1 + 2 = 3
fib4=fib2 + fib3 = 2 + 3 = 5
…
bu işlemin kodu aşağıdaki şekilde yazılabilir:
int fibonacci(int n)
{
if (0 == n) {
return 0;
} else if (1 == n) {
return 1;
} else {
return fibonacci(n - 2) + fibonacci(n - 1);
}
}
Yukarıda verilen bu recursive (kendi kendini çağıran) koda bakıldığında ve kodun tahlili yapıldığında aşağıdaki fonksiyon iç içe çağırma ağacı (recursion tree ) fark edilir:
fibonacci(4)
+------------------------------
| |
fibonacci(2) fibonacci(3)
+----------------- +---------------
| | | |
fibonacci(0) fibonacci(1) fibonacci(1) fibonacci(2)
+-----------
| |
fibonacci(0) fibonacci(1)
yani yukarıdaki örnekte, fibonacci(4) fonksiyonu için çağırma işlemleri sırasıyla gösterilmiştir.
Fibonacci Serisini basan kod (ahmet Bey’in talebi üzerine ekliyorum)
Yukarıdaki kodlarda, verilen sıradaki fibonacci serisinin elemanını basan kodu yazmıştık. Şimdi verilen sayıya kadar olan bütün fibonacci sayılarını basan kodu yazmaya çalışalım.

Kodun çalışan hali aşağıdaki şekildedir:

Yukarıdaki kod dikkat edileceği üzere iteratif (döngü ile) yazılmış bir koddur. Şayet aynı işi özyineli (recursive) olarak yapmak istersek aşağıdaki problem ile karşılaşırız:

Yukarıdaki kodun çalışan hali:

Görüldüğü üzere 8. elemanı bastırmak için hesapladığımız bütün ara değerler ekrana bastırılıyor. Yani yukarıdaki recursion tree (özyineleme ağacının ) tamamı basılıyor. Bu durumda özyineli kodlamanın bu iş için uygun olmadığını söyleyebiliriz. Ancak yine de özyineli olarak fibonacci serisini basmakta ısrar edilirse aşağıdaki şekilde performansı hiçe sayan bir kod yazılabilir:

Yukarıdaki kodun çalışan hali aşağıdaki şekildedir:

Yukarıdaki bu yeni özyineli fonksiyonda her değer için tekrar ve tekrar fibonacci ağacı oluşturularak seri hesaplanmaktadır.
« Özyineli Fonksiyonlar (Recursive Functions) | Fibonacci Arama Algoritması (Fibonacci Search Algorithm) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Fibonacci Sayıları (Fibonacci Numbers)' isimli yazı 05 Aug 2008 tarihinde, saat: 10:19 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 1735 defa okunmuştur.
Benzer yazıları Bilgisayar Matematiği kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
Fibonacci Sayıları (Fibonacci Numbers)
Dinamik Programlama (Dynamic programming)
Fibonacci Arama Algoritması (Fibonacci Search Algorithm)
Mersenne Sayıları (Mersenne Numbers)
Listenin Elemanlarının Değerini 1 Arttıran Kod
Kayan Nokta Sayıları (Floating Point Numbers)
Ortak Katların En Küçüğü (Least Common Multiple)
Complex Conjugate (Karmaşık Eşlenik)
Ramanujan Sayıları (Ramanujan Numbers)
Aritmetik Ortalama (Average , Mean)
Sayıcı Şekli Şifreleme (Counter Mode Encryption, CTR, CM, ICM, SIC)
İşlem Yükleme (Operator Overloading)
Doğrusal Arama (Linear Search)
Histogram ( tekrar dağılımı, histogram)
Rastgele Sayılar (Random Numbers)
Bağlantılar
[...] : Şadi Evren ŞEKER Bu arama algoritması, özyineli (recursive) bir seri olan fibonacci sayılarını kullanarak sıralı bir dizi üzerinde arama yapmaktadır. Çalışma mantığı arama yapılacak [...]
hocam fibonacci sayılarını fonksiyon olarak,nasıl cıkartırım?kullanıcıdan 5 girdiginde,1 1 2 3 5 cıktısı gibi