Öz Yinelemeli (Rekürsif) Fonksiyon | C Programlama

Rüveyda
3 min readSep 14, 2020

C programlama dilinde fonksiyonlar kendilerini de çağırabilir. Bu tür fonksiyonlara rekürsif yani öz yinelemeli fonksiyon denir.

void fun()
{
... .. ...
fun();
... .. ...
}
int main()
{
... .. ...
fun();
... .. ...
}

Bu konuyu anlatmak için en güzel örnek faktöriyel hesabıdır. Bir sayının faktöriyeli n! = 1*2*3*…*(n-1)*n ile hesaplanır. İstenilen sayıya kadar tüm sayılar (istenilen sayı da dahil) birbirleri ile çarpılır. Şimdi bunu öz yinelemeli fonksiyon şekilde C programlama da görelim.

Faktöriyel Hesaplama | C Kodu

> Örneğin 5! hesaplayalım.

Adım adım resimlerle göstermeye çalışacağım. Kırmızı buton içindeki okları takip edelim.

Faktöriyel Hesaplama Kodu

Fonksiyon ilk başta 5 parametresi ile çağrılır. Fonksiyon kendini 4 parametresi için tekrar çağırır. faktoriyel(4) değerini hesaplar. Aynı şekilde faktoriyel(4) hesaplanırken 3 parametresi için kendini tekrar çağırır.

Çıkan Değerler

faktoriyel(1)’e kadar aynı şekilde devam eder. Son duruma gelindiğinden ötürü kendini çağırmaz ve öz yineleme işlemini durdurup geriye döner ve 1 döndürür. Sonra ana(main) kısmında cevap yazdırılır.

Her zaman böyle uzun uzun yapmayacağız. Çok basit bir taktik göstereceğim. Aşağıdaki örnek koda bakalım.

a değişkenini 4 vermiş. fun(a) yı çağırıyor. Bunun çıktısı ne olur?

Orada ki print’i P() fonksiyonu şeklinde yazalım. Ve adım adım ilerleyelim.

P(): Yazdır

  • fun(4) = fun(3) + P(3) + fun(2) (Ana denklem)

fun(4)’ü çağırırken fun(3) ve fun(2) de çağırıyoruz.

  • fun(3) = fun(2) + P(2) + fun(1)
  • fun(2) = fun(1) + P(1) + fun(0)
  • fun(1) = fun(0) + P(0) + fun(-1)

Denklemleri yazdığımıza göre ana denklemimiz de sırayla ilerleyelim. fun(3) denkleminde fun(2)’nin ve fun(1)’in çıktılarını istiyor.

0 dan büyük istenildiğinden dolayı fun(0) ve fun(-1) fonksiyonları çağrılmıyor. Bundan ötürü fun(1)= 0

fun(2) de fun(1) ve P(1) olduğundan fun(2) = 0 1

fun(3) de fun(2) çağırılıyor. Bir tane 2 rakamı yazdırılıyor ve fun(1) çağrılıyor. fun(3) = 0 1 2 0

Ana denkleme göre çıktı (Output): 0 1 2 0 3 0 1

Fark ettiniz mi? Aslında ilk örnekteki gibi yapmış olduk. Sadece sırayla denklemleri yazınca karmaşıklık kalkıyor :)

Derleyici olarak Visual Studio kullandım.

Daha fazla örnek için Github sayfama bakabilir ve destek için yıldızlayabilirsiniz ⭐

Okuduğunuz için teşekkürler. Bir sonraki yazımda görüşmek üzere…

--

--

Rüveyda

Bazen bir kitap, bazen bir film, bazen iş alanımdan… Öğrendiklerimi kendimden bir şeyler katarak yazdığım küçük bir köşe