Fibonacci Algoritması nedir?
Fibonacci dizisi, her sayının kendinden öncekiyle toplanması sonucu oluşan sayı dizisi. 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
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] gittikçe yaklaşan bir dizi elde edilir. Bu durumda genel olarak n'inci
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] sayısı F(n) şu şekilde ifade edilir:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Bu da bir Fibonacci dizisidir:4, 7, 11, 18, 29, 47, … Çünkü Fibonacci dizisi herhangi iki sayıdan başlayabilir.
Fibonacci sayı dizisindeki sayıların birbirleriyle oranı olan ve
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] denilen 1,618 sayısı ise doğada, sanatta ve hayatın her alanında görülen ve estetik ile bağdaştırılan bir sayıdır.
Algoritma hakkında bilgi wikipedia'dan alınmıştır.
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
public class Fibonacci {
public static void main(String[] args) {
int n0 = 1, n1 = 1, n2; // Değişkenleri tanımlayıp, başl
System.out.print(n0 + " " + n1 + " "); // Birinci ve ikinci terimleri yazdırma
for (int i = 0; i < 18; i++) { //Sonraki 18 terime kadar giden döngümğz
n2 = n1 + n0; // Sonraki terim bir önceki iki terim ile toplanıyor
System.out.print(n2 + " "); // Terimi yazdır
n0 = n1; // Terimi yazdırdıktan önceki 2. terim
n1 = n2; // Yazdırılan terim aslında şuan önceki birinci terimimiz
}
System.out.println(); // Satır atlattırmak
}
}
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
Farklı bir yerde bu algoritmanın recursive fonksiyonu ile nasıl yapıldığını sordu bir arkadaş ona binayen buradada sorulabilir ihtimaline karşın paylaşıyorum.
Tabiki for döngüsü ile donmek yerine toplama işlemini yapacağın kısımını bir fonksiyon yazıp durmadan o fonksiyonu çağırabilirsin. Ama fonksiyon parametere almalıdır çünkü kaçıncı terime kadar gitmek istediğinizi orada kontrol edebilirsiniz.
Yani yukarıdaki kısmı şu şekilde duzenlemelisiniz;
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
// recursive metodumuz long değeri dönüyor main içinde yazdırma işlemi için
public static long fibonacci(long number) {
if ((number == 0) || (number == 1)) // ilk sayılar için yukarıdaki ilk iki terim için olan kısmı
return number;
else
//recursion yapılan kısım
//Bu kısmı 2. terimden sonraki sayıların yazdırılan güncel olanı yani 1. terim ve öncesindeki 2. terimin toplanması
return fibonacci(number - 1) + fibonacci(number - 2);
}
public static void main(String[] args) {
for (int counter = 0; counter <= 10; counter++)
System.out.printf("Fibonacci %d terim : %d\n", counter, fibonacci(counter));
}