CodeBlanks Logo Icon CodeBlanks

Özyineleme

  • C kursu
  • Başlangıç
  • Ders 69/116
  • 5 dk

Bir fonksiyonun kendini çağırmasıyla özyinelemeyi öğrenirsin.

Özyineleme nedir?

Özyineleme (recursion), bir fonksiyonun kendini çağırmasıdır. Her çağrı, daha küçük bir problemi çözer.

int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

int bes = factorial(5);  /* 120 */

Özyinelemeli fonksiyonun bir taban durumu (durdurucu koşul) olmalıdır; yoksa sonsuz çağrı olur ve program çöker. Burada taban durumu n <= 1'dir.

Çağrı yığını

Her özyinelemeli çağrı, çağrı yığınında (call stack) bir katman ekler. Taban durumuna ulaşınca katmanlar tek tek çözülür ve değerler birleşir.

factorial(3)
  → 3 * factorial(2)
  → 3 * (2 * factorial(1))
  → 3 * (2 * 1) = 6

Çok derin özyineleme, yığını taşırabilir; bu yüzden büyük girdiler için döngü tercih edilir. Özyineleme, ağaç ve böl-ve-yönet algoritmalarında doğal görünür.

Uygulama Faktöriyel hesapla

int factorial(int n) özyinelemeli fonksiyonunu tanımla. n <= 1 ise 1 dönsün; değilse n * factorial(n - 1). main içinden printf("%d\n", factorial(5)); ile çağır. Çıktı 120 olmalı.

Başlangıç kodu

main.c
#include <stdio.h>

/* factorial özyinelemeli fonksiyonunu tanımla */

int main(void) {
    /* printf %d ile factorial(5) çağır */
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

int main(void) {
    printf("%d\n", factorial(5));
    return 0;
}

Beklenen çıktı

120

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Özyineleme kavramlarını eşleştir

Kavram Anlamı
taban durumu durdurur
özyineleme kendini çağırır
factorial(5) 120
factorial(0) 1

2 Özyinelemeli fonksiyonda taban durumu neden önemlidir?

  • Hızı artırır
  • Sonsuz çağrıyı önler Doğru cevap
  • Belleği temizler
  • Dönüş türünü belirler

Açıklama: Taban durumu olmazsa fonksiyon sonsuz kez kendini çağırır.

3 Taban durumu

Soru
int factorial(int n) {
    if (n <= 1) return 1;
    return n * ____;
}
Cevap
int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

Açıklama: Özyineleme: n * factorial(n - 1).

Başlangıç bölümündeki tüm dersler