C Özyineleme adından da anlaşılacağı üzere bir fonksiyonun kendi kendini çağırmasıdır. Belli bir işlemler için tanımladığımız fonksiyonlar gerekli yerlerde çağrılıp kullanılmakta ancak bazı durumlarda fonksiyonu bizim değil de kendi kendini çağırması gerekebilir işte bu gibi durumlarda C Özyineleme Fonksiyonu devreye girmektedir.
C Özyineleme Nasıl Çalışır?
void recurse()
{
... .. ...
recurse();
... .. ...
}
int main()
{
... .. ...
recurse();
... .. ...
}
Yukarıdaki koddan da anlaşıldığı üzere C Özyineleme fonksiyonları fonksiyonun içerisinde tekrar kendisini çağırmakta peki bu sonsuza dek böyle devam mı edecek? tabi ki de hayır bu işlemin son bulması için bizlerin belirlediği şartın sağlanması gerekmektedir. Şart sağlandığında C Özyineleme duracaktır.

Örnek1: Özyinelemeyi Kullanarak Doğal Sayıların Toplamı
#include <stdio.h>
int sum(int a);
int main()
{
int sayi, result;
printf("pozitif bir tamsayı girin: ");
scanf("%d", &sayi);
result = sum(sayi);
printf("Toplam = %d", result);
return 0;
}
int sum(int b)
{
if (b!=0)
return b+ sum(b-1); // sum() function calls itself
else
return b;
}
Çıktısı :
pozitif bir tamsayı girin:4
Toplam = 10
Başlangıçta, sum() fonksiyonuna gönderdiğimiz sayı ile beraber main() fonksiyonu da çağrılır. Kodda num değerini başlangıçta 4 girdiğimizi varsayarsak bir sonraki işlemde 3 sonrakinde 2 ve en son 1 olarak döner 0 olduğunda ise C Özyineleme biter.
Örnek2 : Özyineleme Kullanarak OBEB Bulmak
#include <stdio.h>
int hcf(int a0, int a1);
int main()
{
int a0, a1;
printf("pozitif iki tam sayı girin: ");
scanf("%d %d", &a0, &a1);
printf("%d ve %d sayısının OBEB'i %d.", a0, a1, hcf(a0,a1));
return 0;
}
int hcf(int a0, int a1)
{
if (a1 != 0)
return hcf(a1, a0%a1);
else
return a0;
}
Çıktısı :
pozitif iki tam sayı girin: 50 40
50 ve 40 sayısının OBEB'i 10.
Özyinelemenin Avantajları ve Dezavantajları
C Özyineleme fonksiyonlarında kodlar daha az yer kaplayıp daha okunaklı haldedir. Ancak bu fonksiyonlar döngülere nazaren daha ağır çalışmakta yani bu fonksiyonu kullanmanız projenizin hızı açısından kötü bir durum olabilir. Özyineleme ile yapılan tüm projelerin aynı zamanda döngülere dönüşebildiğini de unutmayın. Eğer ki performans yönünden bir proje hazırlıyor iseniz kesinlikle bunların yerine döngüler kullanın. Her ne kadar kod karmaşası olacak olsa da performans açısından çok daha iyidir.