Algoritma : Fibonacci dizilimi - Java, C#, Swift, C , C++

kenzai

Özel Üye
22 Ara 2010
8,560
29
Trondheim
Selamun aleyküm bu makale'de sizlere 5 farklı yazılım diliyle konsola Fibonacci sayılarını yazdıracağım.

Kullanacağımız yazılım dileri :

Java, C#, Swift, C, C++

İlk önce Fibonacci dizilimini tanıyalım sonra algoritmasını bulalım ve kodları yazarak satır satır açıklayalım.

İsterseniz biraz Fibonacci sayılarını tanıyalım :

Fibonacci dizisi, her sayının kendinden öncekiyle toplanması sonucu oluşan bir sayı dizisidir.Daha iyi anlaşılabilmesi için sizlere şöyle bir görsel hazırladım :

8PmylV.png



Fibonacci dizisi ile ilgili daha ayrıntılı bilgi almak için Vikipedi sayfası buraya tıklayarak ziyaret edebilirsiniz.

Fibonacci dizisini formülle göstermek istersek :
"n" inci Fibonacci sayısı = F(n) olursa :
F(n) = F(n-1) + F(n)
Algoritması :
1. sayı ve 2.sayıları toplanır.
Toplanan sayılar "sonuc" isimli değişkene atanır.
Ve sonra değerler bir adım kaydırılır.

- Kaydırma işlemini şu şekilde açıklayabiliriz :
2. Sayı, 1.Sayı'ya atanır "sonuc" ise 2. sayıya atanır:

- Bu yaptığımızı a, b ve sonuc değişkenleri üzerinde yaparsak daha iyi anlayacaksınız :
a = 1. Sayı
b = 2.Sayı
sonuc = a+b ((3.Sayı) Yani sıradaki sayıyı bulduk.)

Sonra bir adım sayıları kaydırıyoruz :
a = b
b = sonuc
sonuc = a+b
Not : Bir yazılımın farklı algoritmalarla yazılabileceğini unutmayınız. Yani kendinizde farklı bir algoritma üretebilirsiniz.
Hadi gelin kurduğumuz algoritmayı 5 farklı yazılım diliyle yazıp satır satır açıklayalım:

Java ile:

Kod:
public class JavaFibonacciDizilimi {  
    public static v o i d main(String[] args) {  
          
        int a, b = 1, sonuc = 0;  
    // int tipinde a,b ve sonuc isimli değişkenler oluşturuyoruz.  
    // b değişkenini, 1'e eşitliyoruz.  
    // sonuc değişkenini, 0'a eşitliyoruz.  
          
      
        for(int i = 0; i<10; i++){  
    // Bir döngü oluşturuyoruz.  
        // int tipinde i isimli bir değişken oluşturuyoruz.  
        // i, 10'a eşit olana kadar döngümüz tekrarlanacak.  
        // i değişkenini bir arttırıyoruz.  
    // Bu şekilde düngünün 10 kere dönmesinş sağladık.  
      
      
            a = b;  
    // b değişkeninin değerini, a değişkenine atıyoruz.  
      
            b = sonuc;  
    // sonuc değişkeninin değerini, b değişkenine atıyoruz.  
      
            sonuc = a + b;  
    // a ile b değerlerini topluyoruz ve sonuc değişkenine atıyoruz.  
      
            System.out.println(sonuc);  
    // sonuc değerini konsola yazdırıyoruz.  
              
        }     
    }    
}


C# ile:

Kod:
using System;  
  
namespace CSharpFibonacciDizilimi  
{  
 class MainClass  
 {  
  public static v o i d Main (string[] args)  
  {  
  
   int a, b = 1, sonuc = 0;  
   // int tipinde a,b ve sonuc isimli değişkenler oluşturuyoruz.  
   // b değişkenini, 1'e eşitliyoruz.  
   // sonuc değişkenini, 0'a eşitliyoruz.  
  
  
   for(int i = 0; i<10; i++){  
    // Bir döngü oluşturuyoruz.  
    // int tipinde i isimli bir değişken oluşturuyoruz.  
    // i, 10'a eşit olana kadar döngümüz tekrarlanacak.  
    // i değişkenini bir arttırıyoruz.  
    // Bu şekilde düngünün 10 kere dönmesinş sağladık.  
  
  
    a = b;  
    // b değişkeninin değerini, a değişkenine atıyoruz.  
  
    b = sonuc;  
    // sonuc değişkeninin değerini, b değişkenine atıyoruz.  
  
    sonuc = a + b;  
    // a ile b değerlerini topluyoruz ve sonuc değişkenine atıyoruz.  
  
    Console.WriteLine(sonuc);  
    // sonuc değerini konsola yazdırıyoruz.  
  
  }  
   }  
 }  
}

Swift ile:

Kod:
var a = 0, b = 1, sonuc = 0  
// int tipinde a,b ve sonuc isimli değişkenler oluşturuyoruz.  
// b değişkenini, 1'e eşitliyoruz.  
// sonuc değişkenini, 0'a eşitliyoruz.  
  
  
for(var i = 0; i<10; i++){  
    // Bir döngü oluşturuyoruz.  
    // int tipinde i isimli bir değişken oluşturuyoruz.  
    // i, 10'a eşit olana kadar döngümüz tekrarlanacak.  
    // i değişkenini bir arttırıyoruz.  
    // Bu şekilde düngünün 10 kere dönmesinş sağladık.  
      
      
    a = b  
    // b değişkeninin değerini, a değişkenine atıyoruz.  
      
    b = sonuc  
    // sonuc değişkeninin değerini, b değişkenine atıyoruz.  
      
    sonuc = a + b  
    // a ile b değerlerini topluyoruz ve sonuc değişkenine atıyoruz.  
      
    print(sonuc)  
    // sonuc değerini konsola yazdırıyoruz.  
      
}


C ile:


Kod:
//  main.c  
//  cFibonacciDizisi  
//  
  
#include <stdio.h>  
  
int main(int argc, const char * argv[]) {  
      
    int a, b = 1, sonuc = 0;  
    // int tipinde a,b ve sonuc isimli değişkenler oluşturuyoruz.  
    // b değişkenini, 1'e eşitliyoruz.  
    // sonuc değişkenini, 0'a eşitliyoruz.  
      
      
    for(int i = 0; i<10; i++){  
        // Bir döngü oluşturuyoruz.  
        // int tipinde i isimli bir değişken oluşturuyoruz.  
        // i, 10'a eşit olana kadar döngümüz tekrarlanacak.  
        // i değişkenini bir arttırıyoruz.  
        // Bu şekilde düngünün 10 kere dönmesinş sağladık.  
          
          
        a = b;  
        // b değişkeninin değerini, a değişkenine atıyoruz.  
          
        b = sonuc;  
        // sonuc değişkeninin değerini, b değişkenine atıyoruz.  
          
        sonuc = a + b;  
        // a ile b değerlerini topluyoruz ve sonuc değişkenine atıyoruz.  
          
        printf("%d \n",sonuc);  
        // sonuc değerini konsola yazdırıyoruz.  
          
    }  
      
    return 0;  
}  
  
</stdio.h>

C++ ile:

Kod:
    //  
//  main.cpp  
//  c++FibonacciDizilimi  
//  
//  
  
#include <iostream>  
  
int main(int argc, const char * argv[]) {  
      
    int a, b = 1, sonuc = 0;  
    // int tipinde a,b ve sonuc isimli değişkenler oluşturuyoruz.  
    // b değişkenini, 1'e eşitliyoruz.  
    // sonuc değişkenini, 0'a eşitliyoruz.  
      
      
    for(int i = 0; i<10; i++){  
        // Bir döngü oluşturuyoruz.  
        // int tipinde i isimli bir değişken oluşturuyoruz.  
        // i, 10'a eşit olana kadar döngümüz tekrarlanacak.  
        // i değişkenini bir arttırıyoruz.  
        // Bu şekilde düngünün 10 kere dönmesinş sağladık.  
          
          
        a = b;  
        // b değişkeninin değerini, a değişkenine atıyoruz.  
          
        b = sonuc;  
        // sonuc değişkeninin değerini, b değişkenine atıyoruz.  
          
        sonuc = a + b;  
        // a ile b değerlerini topluyoruz ve sonuc değişkenine atıyoruz.  
          
        std::cout << sonuc << std::endl;  
        // sonuc değerini konsola yazdırıyoruz.  
          
    }  
      
    return 0;  
}  
  
</iostream>

Bu kodların konsol çıktısı şu şekilde olur : 1 1 2 3 5 8 13 21 34 55


Umarım yararlı olmuştur.
İyi çalışmalar.
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Aslında fibonacci serisi recursion'ı anlatmak için kullanılır genelde.

O sebeple bu kadar döngü ve koddan kurtaran recursive kodunuda ben yazayım :

Kod:
class Fibonacci{

    public static int fibonacci(int sayi){

        if(sayi == 1) return 1;
        if(sayi == 0) return 0;

        return fibonacci(sayi -1) + fibonacci(sayi-2);
    }

    public static **** main(String[] args) {

        System.out.println(fibonacci(3));
    }
}


fibonacci(3) = fibonacci(2) + fibonacci(1)

fibonacci(2) = fibonacci(1) + fibonacci(0)

fibonacci(1) = 1

fibonacci(0) = 0

Buradan yukarıya doğru toplayarak gidersek ;

fibonacci(2) = 1 + 0
fibonacci(3) = 1 + 1 = 2

şeklinde açıklanabilir.



 

Zonza

Katılımcı Üye
26 Mar 2016
923
0
İzmir
Python yok, üzüldüm. Ben ekleyeyim o halde :D
Kod:
[COLOR="White"]def fib(n):
     a, b = 0, 1
     while a < n:
         print(a, end=' ')
         a, b = b, a+b
     print()
     
fib(1000)[/COLOR]
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.