İleri Seviye C Programlama – Recursive Function

C Programlama dilinde fonksiyonları Iteratif fonksiyonlar ve Recursive fonksiyonlar şeklinde iki gruba ayırabiliriz. Iteratif fonksiyonlar, do-while, while, for gibi döngüler kullanılarak bir işlemi birden fazla kez yapmaya yarayan fonksiyonlardır. Recursive fonksiyonlar da ise bu döngüler asla kullanılmaz. Eğer bu döngüleri kullanıyorsak fonksiyonumuza recursive diyemeyiz. Kısaca Recursive Fonksiyon, bir fonksiyonun kendisini çağırmasıyla bir işlemi birden fazla defa yapmaya yarar.

 

Aşağıda Recursive fonksiyonlara güzel bir örnek olan Hanoi kuleleri kodu verilmiştir.

#include <stdio.h>
void towerfun(int, char, char, char);
int main()
{
 int n;// defined to store the number disc
 printf("Enter the number of disks : ");
 scanf("%d", &n);
 printf("The sequence of moves involved in the Tower of Hanoi are :\n");
 towerfun(n, 'A', 'C', 'B'); // A, B, C are tower
 printf("\n");
 return 0;
}

void towerfun(int n, char fr, char tr, char ar)
{
 if (n == 1)
 {
 printf("\nMove disk 1 from rod %c to rod %c", fr, tr);
 return;
 }
 towerfun(n - 1, fr, ar, tr);
 printf("\nMove disk %d from rod %c to rod %c", n, fr, tr);
 towerfun(n - 1, ar, tr, fr);
}

Hanoi kuleleri, bir matematik oyunu veya bulmacadır. Üç direk ve farklı boyutlarda disklerden oluşur. Bu diskleri dilediğiniz direğe aktarabiliriz. Bulmaca bir direkte en küçük disk yukarıda olacak şekilde, küçükten büyüğe direk üstünde dizilmiş olarak başlar. Böylece konik bir şekil oluşmuş olur.

Oyunun kuralları

  • Her hamlede sadece bir disk taşınabilir.
  • Her hamle en üstteki diski direkten alıp diğer bir direğe taşımaktan oluşur. Diğer direkte daha önceden diskler olabilir.
  • Hiçbir disk kendisinden küçük bir diskin üzerine koyulamaz.