Orhan Gazi Kılıç

"Allah'ım sen beni, milletime ve devletime faydam dokunmadan alma"

Javascript Fibonacci Sayılarını Hesaplama ve Altın Oran

Yazar: Orhan Gazi KILIÇ — 19 Kasım 2013 Salı — Saat: 20:38:00

English: Contemporary portrait of Fibonacci by...
English: Contemporary portrait of Fibonacci by unknown medieval artist. (Photo credit: Wikipedia)
Khan akademinin Türkçeleşmesinin ardından neler olmuş diye merak edip python eğitimlerini izlemek istedim gerçekten de çok güzel profesyonelce hazırlanmış ve seslendirilmiş. Fibonacci Fonksiyonu ile Alıştırma konulu eğitimde fibonacci ve fibonacci sayılarıyla ilgili bilgi verilmiş ve eğitimci de son olarak zor bir ödev veriyor. Hakikaten de zorladı dersem yalan olmaz. Nasıl yapacağına tamamen karar verene kadar karmaşık görünen bir konu.

İlk önce normal değişkenlerle yapmak istedim ama aklıma bir şey gelmeyince dizilerle denemek istedim. Dizilerle deneyince olacağını farkedince bu sefer de formülü bulmak gerekiyordu. Biraz düşününce formülü de buldum ve yazmaya başladım.
function fibonacci(sira)
{
 var fibo;
 var dizi = new Array(0,1);

 for(i=0; i<sira; i++)
 {
  //istenen sıraya kadar hesaplanıp dizi doldur
  dizi.push(dizi[i]+dizi[i+1]);
 }
   
 return dizi[sira];
}

document.write(fibonacci(9));

Görüldüğü gibi basit gibi geliyor ama gerçekten buluncaya kadar zor. Şimdi anlatmak istersek bir fibo değişkenimizin olduğunu bir de dizi değişkenimizin olduğunu göreceğiz. Dizi de ilk iki eleman 0 ve 1 olarak tanımlanmış. Bunu yapmak eğitmenin videoda söylediği bir sözden geldi aklıma: "Fibonacci sayılarının ilk ikisi 0 ve 1 dir.". Devam edersek fibonacci sayıları nasıl elde ediliyordu? Son iki sayının toplamını en son sıraya yazarak. Mantık bu. O zaman 0. fibonacci sayısı 0, 1.si 1, o zaman 2.si 0+1'dir yani 1, 3.sü 1+1'dir yani 2.

Peki bunu yazılıma nasıl dökeriz. İlk iki sayıdan türediği mantığından başlarsak yazmaya, ilk iki sayıyı dizinin 0. ve 1. elemanı olarak 0 ve 1 tanımlarız, sonra kullanıcının istediği sıra kadar bir for döngüsüne sokarak i.nci elemanla, i'nin hemen sağındaki elemanı (i+1'inci) toplayıp dizinin sonuna dizilere ait bir push() fonksiyonuyla ekleriz.

Kodlara dikkat ederek yazdıklarımı okuyun gerçek hayattakiyle aynı olduğunu görürsünüz ve daha iyi anlarsınız. i'nin değeri ilk olarak 0 yani ilk döngüde dizi[0]. elemanı artı dizi[0+1]. elemanı toplanacak ve push() fonksiyonu sayesinde dizinin sonuna eklenecek ve döngüden çıkılıp koşul sağlanıyorsa döngü tekrar işleyecek. Yani bellekte bir yerde dizimiz 3 elemanlı oldu ve şu anda bu şekilde:
Array(0,1,1)
Aklınızda kolay canlanması için devam edeyim, döngü devam etti ve for döngüsünün yapısı gereği i şimdi 1 oldu yani dizi[1]. eleman artı dizi[1+1]. eleman toplanıp push ile diziye eklendi. Kullanıcının belirttiği sıraya kadar bu böyle devam eder ve döngüden çıkıldıktan sonra return dizi[sira]; satırıyla fonksiyonun kullanıcının istediği sıradaki fibonacci sayısı geri döndürülür. Zaten daha sonraki satırı da anlamışsınızdır document.write ile ekrana yazdırdık.

Altın Oran ile Alâkası

Bundan sonrasına fibonacci sayıları ile altın oran arasındaki ilişikiyi merak edenler okumaya devam etsinler. Fibonacci sayılarının önceki ve sonraki sayıların birbirine oranı ise altın orana çok yakın bir sonuç verir. Örneğin, fibonacci 9. sayının 10. sayıya oranı 9/10= 0.618'tir. Ki bu da altın orana çok yakındır. Daha da ilginci, sayılar yükseldikçe oranları altın orana çok daha yaklaşmaktadır. Altın oransa kısaca Allah'ın yaratırken insan, ayçekirdeği ve bir çok canlı, cansız varlıkta, insanların da fotoğraflarda, telefonlarda, bilgisayarlarda kullandığı orandır. Peki bunu nasıl yazabiliriz. Yazdığımız fibonacci fonksiyonundan faydalanabiliriz. Yani şöyle:

function altin_oran(fibosira)
{
 var altin_oran = fibonacci(fibosira)/fibonacci(fibosira+1);
 return altin_oran;
}

document.write(altin_oran(9));
Fonksiyonun return ile döndürdüğü sonuç iki fibonacci sayısının (sıra ve sıra+1'in) oranını yani altın oranı verecektir. Bunu da document.write() ile ekrana yazdırdık. Aşağıda tam kodu görebilirsiniz. Result sekmesinden sonuçları görebilirisiniz.
function fibonacci(sira)
{
  var fibo;
  var dizi = new Array(0,1);
  
  for(i=0; i<sira; i++)
  {
    //istenen sıraya kadar doldur
    dizi.push(dizi[i]+dizi[i+1]);
  }
  
  return dizi[sira];
}
document.write("9. sıradaki fibonacci sayısı: "+fibonacci(9));

function altin_oran(fibosira)
{
 var altin_oran = fibonacci(fibosira)/fibonacci(fibosira+1);
 return altin_oran;
}
document.write("<br />Atın oran: "+altin_oran(9));
See the Pen %= penName %> by orhan gazi (@orhangazi) on CodePen

Enhanced by Zemanta


#orhangazikılıç #yazılımcı #programcı #mühendis #oyuncu #vatanperver