2.2 Rekürsiyon (Recursion)

Rekürsiyon, bir fonksiyonun kendisini çağırdığı programlama tekniğidir. Bu teknik, belirli problemleri daha basit alt problemlere dönüştürerek çözer. C++'ta rekürsiyon, belirli bir duruma ulaşıldığında durması gereken bir fonksiyonun tasarımı ile gerçekleştirilir.

Rekürsiyonun Temel Unsurları

  1. Temel Durum (Base Case): Rekürsif fonksiyonun hangi koşul altında duracağını belirler. Temel durum olmadan, fonksiyon sonsuz döngüye girebilir.

  2. Rekürsif Durum (Recursive Case): Fonksiyonun kendisini çağırdığı ve problemi daha küçük bir alt probleme dönüştürdüğü durumdur.

Örnek: Faktöriyel Hesaplama

Faktöriyel, n sayısının pozitif tam sayılar olarak çarpımını temsil eder ve matematiksel olarak şu şekilde tanımlanır:

  • 0! = 1

  • n! = n * (n-1)! (n > 0 için)

Rekürsif Faktöriyel Fonksiyonu:

#include <iostream>
using namespace std;

// Rekürsif faktöriyel fonksiyonu
int factorial(int n) {
    // Temel durum
    if (n <= 1) {
        return 1;
    } else {
        // Rekürsif durum
        return n * factorial(n - 1);
    }
}

int main() {
    int number;
    cout << "Bir pozitif tam sayı girin: ";
    cin >> number;
    
    if (number < 0) {
        cout << "Faktöriyel negatif sayılar için tanımsızdır." << endl;
    } else {
        cout << number << "! = " << factorial(number) << endl;
    }
    
    return 0;
}

Çalışma Şekli:

  1. Kullanıcı bir pozitif tam sayı girer.

  2. factorial fonksiyonu, verilen sayıyı kontrol eder:

    • Eğer sayı 0 veya 1 ise, 1 döner (temel durum).

    • Aksi halde, sayıyı kendisinden bir önceki sayının faktöriyeli ile çarparak döner (rekürsif durum).

  3. Bu süreç, n değeri 1'e ulaşana kadar devam eder.

Rekürsiyonun Avantajları ve Dezavantajları

Avantajları:

  • Kodun daha temiz ve anlaşılır olmasını sağlar.

  • Problemi küçük parçalara bölerek çözüm bulmayı kolaylaştırır.

Dezavantajları:

  • Her rekürsif çağrı, bir çağrı yığını (call stack) kullanır, bu da bellekte aşırı kullanım ve yığın taşması (stack overflow) riskine yol açabilir.

  • Bazı durumlarda, iteratif çözümler daha verimli olabilir.

Last updated