Daha önce C programlama dilinde fonksiyonlar konusunu görmüştük. Bu yazımızda da, bir çok problemi çözmemizi sağlayacak olan C programlama dilinde recursive fonksiyonlar, yani özyinelemeli fonksiyonlar konusunu işleyeceğiz. Başlamadan önce, eğer eksikleriniz varsa kesinlikle fonksiyonlar konusundaki eksikliklerinizi tamamlamalısınız. Uyarımızı da yaptığımıza göre artık başlayabiliriz.

Recursive Fonksiyon (Özyinelemeli Fonksiyon) Nedir ?

Kodlama kısmına geçmeden önce recursive fonksiyonların ne olduğu ve nasıl çalıştığını anlamakta fayda var.

Recursive fonksiyonlar Türkçeye özyinelemeli fonksiyonlar olarak geçmiştir. Özyinelemeli fonksiyonlar kendi kendini çağıran fonksiyonlardır. Bu fonksiyonlar çalışırken kendilerini tekrar tekrar çağırırlar ve tabii ki fonksiyon içerisindeki komutlarda her seferinde çalışırlar. Son olarak istenilen durum elde edildikten sonra fonksiyon kaldığı yerden devam eder veya biter.

Ayrıca şunu da belirtelim, recursive fonksiyonlar, döngülerin fonksiyon halinde yazılmış hali diyebiliriz. Dolayısıyla her bir recursive fonksiyon döngü şeklinde yazılabilir.

recursive (özyinelemeli fonksiyonlar)

Birazda recursive fonksiyonunun mantığından bahsedelim. Basit bir örnekle açıklamak çok daha anlaşılır olacaktır. Örneğin, 1’den 5’e kadar olan sayıları toplayan bir kod yazmak istiyoruz. Bu kodun mantığı, 1’den başla ve 5’e gelene kadar olan sayıları bir değişkende toplamak olur. Bu mantığı recursive olarak tanımlayalım. Sonuç olarak burada sürekli toplama işlemi yapacağız. Dolayısıyla sadece toplama işlemi yapan ve kendini tekrarlayan bir fonksiyon tanımlayabiliriz. 1 sayınını fonksiyona yollar ve bu sayıyı toplam değişkenine ekleriz. Daha sonra 1 sayısını bir arttırıp, toplam değişkeniyle birlikte tekrar fonksiyona yollamamız gerekir. Bunu her seferinde yaparız, ta ki 5’e gelene kadar. 5’e gelindiğinde toplam fonksiyonunun değerini tekrar main’e yollarız. (Bu örneğin çözümü aşağıda var.)

C Programlama Recursive Fonksiyon Yapısı

veri-türü fonk-ismi(parametreler){
     //kodlar     
     fonk-ismi(parametreler);
     //kodlar   
}

Recursive (Özyinelemeli) Fonksiyon Avantaj ve Dezavantajları

Avantajlar

  • Recursive fonksiyonlar ile çok daha az kod ile işlevi yüksek kodlar yazabilirsiniz.
  • Kodunuz daha okunabilir olur.
Bu yazı dikkatini çekebilir.   Python Basit Hesap Makinesi Örneği

Dezavantajlar

  • Bazı durumlarda çok yavaştır.
  • Ufak bir hatada sonsuz döngüye girebilirsiniz.
  • Yine bazı durumlarda bellek problemi yaşanabilir.

C Programlama Recursive Fonksiyon Örnekleri

Daha iyi anlaşılabilmesi için giriş düzeyinde iki tane c programlama recursive fonksiyon örneklerini çözelim.

Örnek 1 : 1’den 5’e kadar olan (5 dahil) sayıları toplayan programın C programlama dilinde kodunu yazınız. Çözümde recursive fonksiyon kullanın.

Cevap :

#include <stdio.h>

int topla(int sayi, int t){
    if(sayi <= 5){ //sayi 5'i geçmemişse işlem bitmemiştir. 
        t = t + sayi;
        topla (sayi+1,t); // sayiyi 1 arttırıp tekrar fonksiyona yollarız. 
    }
    else // sayi 5'i geçtiğinde işlem bitmiştir. Sonucu 'return' ile main'e yollarız.
        return t; 
}

int main(){ 
    int toplam=0,sonuc;

    sonuc = topla(0,toplam); 
    printf("Sonuc : %d", sonuc);
    //printf("Sonuc : %d", topla(0,toplam)); direkt bu şekilde de yazılabilir. 
}

Bu kodun çıktısı 15 olacaktır.

Örnek 2 : 5 sayınının faktöriyelini bulan kodu C programlama dili ve recursive fonksiyon kullanarak yazınız.

Cevap :

Burada mantık şu şekilde; her bir sayı kendisinden bir küçük sayı ile çarpılıyor.

#include <stdio*h>

int faktoriyel(int s){
    if(s == 0 || s == 1){
        return 1;
    }
    return s * faktoriyel(s - 1); // s değişkeni, her seferinde tekrar faktoriyel değişkeninden gelen sayı ile çarpılır. 
}

int main(){ 
    printf("5 sayisinin faktoriyeli : %d", faktoriyel(5));
}

Çıktısı :

C Programlama Recursive Fonksiyonlar (Özyinelemeli Fonksiyonlar) Örneği

Eğer daha fazla c programlama recursive fonksiyon örnekleri çözmek isterseniz ‘C Programlama Örnekleri‘ kategorisine göz atabilirsiniz.


Bu yazımızda C programlama dilinde recursive fonksiyonlar (özyinelemeli fonksiyonlar) konusunu işledik. Umarım faydalı olmuştur. Anlamadığınız kısımlar var ise yorumlar kısmına belirtebilirsiniz. Diğer C programlama dili derslerimizi okumak isterseniz buradan tümüne ulaşabilirsiniz.