11 : Fibonacci Serisi

Tekrarlanan işleri for döngüsü ile yapabildiğimizi gördük. Ancak tek yöntem bu değil. Döngüler konusunun en popüler örneklerinden biri fibonacci serileridir. Bu örneği hem for döngüsü ile yapalım hem de bir diğer döngü olan while ile yapalım.

Koda geçmeden önce fibonacci serisinden bahsedelim. Bu seri 1'den başlayıp bir sonraki sayıyı kendisi ve bir önceki sayıyı toplayarak bulmasıyla oluşur. Yani 1'den başlayan fibonacci serisi şöyle değerler alır.

1-1-2-3-5-8-13-21...

Bu serinin popüler olmasının nedeni ise sonsuzdaki son iki değerin birbirine bölümünün altın oranı vermesi. Bunu da belirtmeden geçmeyelim.

Burada sonsuza kadar gidebildiği için ve bizim bunu gerçekleştirmemiz olası olmadığı için kendimize bir durak noktası seçeceğiz. Örneğin 10 değer yazdırabiliriz.


 fibonacci.c
#include<stdio.h>
 
int main()
{
   int N = 10;
   int t1 = 0;
   int t2 = 1;
   int next = 0;
   int i = 0;
   for (i = 0; i < N; i++)
   {
      printf("%d  ",t2);
      next = t2 + t1;
      t1 = t2;
      t2 = next;
   }
}
  

Aynı işi while döngüsü ile yapalım.


 hello.c
#include<stdio.h>
  
int main()
{
   int N = 10;
   int t1 = 0;
   int t2 = 1;
   int next = 0;
   int i = 0;
   while(i++ < 10)
   {
      printf("%d  ",t2);
      next = t2 + t1;
      t1 = t2;
      t2 = next;
   }
}
  

while for dögüsünden farklı olarak tek bir parametre ile çalışır. Parantez içindeki değer doğru olduğu sürece (0' dan farklı da denilebilir) döngü çalışacaktır. Her iki döngüde de bu çalışma koşulları döngü çalışırken belirlenebilir. Döngünün ne zaman bitirileceği düzgün belirtilmezse sonsuz döngü oluşur ve programda kilitlenmeler olabilir. Bu da istenmeyen bir durumdur.

Aşağıdaki örnekler aynı işi yapmaktadırlar.

#include<stdio.h>
 
int main()
{
   int N = 10;
   int t1 = 0;
   int t2 = 1;
   int next = 0;
   int i = 0;
   for (; ;)
   {
      printf("%d  ",t2);
      next = t2 + t1;
      t1 = t2;
      t2 = next;
      i = i + 1;
      if (i >= N)
      {
         break;
      }
   }
}
  

#include<stdio.h>
int main()
{
   int N = 10;
   int t1 = 0;
   int t2 = 1;
   int next = 0;
   int i = 1;
   while(1)
   {
      printf("%d  ",t2);
      next = t2 + t1;
      t1 = t2;
      t2 = next;
      if (i++ >= 10)
      {
         break;
      }
   }
}
  


Yorumlar

Bu blogdaki popüler yayınlar

31 : Fonksiyonda Struct Kullanımı

Structure - 29 : Yapılar ile Öğrenci Bilgileri Tutma

23 : İki Karakter Dizisini Birleştirme