Özyinelemeye Giriş
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 45 / 56.
Özyineleme (Recursion), bir fonksiyonun bir problemi çözmek için kendisini çağırdığı bir programlama tekniğidir. Döngüleri kullanmak yerine, özyinelemeli fonksiyonlar, karmaşık problemleri doğrudan çözülebilen basit bir duruma ulaşana kadar daha küçük ve benzer alt problemlere böler.
Her özyinelemeli (recursive) fonksiyonun iki temel bileşeni olmalıdır. Taban durum (base case), özyinelemeyi durduran bir koşuldur; bu koşul olmadan fonksiyon kendini sonsuza kadar çağıracaktır. Özyinelemeli adım (recursive step) ise fonksiyonun, her çağrıda taban duruma daha da yaklaşarak kendisini değiştirilmiş parametrelerle çağırdığı yerdir.
İşte özyinelemeyi (recursion) gösteren basit bir geri sayım örneği:
void countdown(int n) {
if (n <= 0) { // Temel durum: n 0'a ulaştığında dur
std::cout << "Done!" << std::endl;
return;
}
std::cout << n << std::endl;
countdown(n - 1); // Özyinelemeli adım: n-1 ile çağır
}countdown(3) fonksiyonunu çağırdığınızda, 3 yazdırır, ardından 2 yazdıran countdown(2) fonksiyonunu çağırır, sonra countdown(1) fonksiyonunu çağırır ve temel duruma ulaşana kadar bu şekilde devam eder. Her fonksiyon çağrısı, bitmeden önce bir sonrakinin tamamlanmasını bekler ve sonunda orijinal çağırana geri dönen bir çağrı zinciri oluşturur.
Kopya kağıdı
Özyineleme (Recursion), bir fonksiyonun bir problemi daha küçük alt problemlere bölerek çözmek için kendisini çağırmasıdır.
Her özyinelemeli fonksiyonun şunlara ihtiyacı vardır:
- Temel durum (Base case): özyinelemeyi durduran koşul
- Özyinelemeli adım (Recursive step): fonksiyonun kendisini değiştirilmiş parametrelerle çağırması
Örnek geri sayım fonksiyonu:
void countdown(int n) {
if (n <= 0) { // Temel durum
std::cout << "Done!" << std::endl;
return;
}
std::cout << n << std::endl;
countdown(n - 1); // Özyinelemeli adım
}Kendin dene
Bu ders bir kod alıştırması içermiyor.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği4Map'ler (Anahtar-Değer Çiftleri)
std::map'e GirişBir Map OluşturmaDeğerlere Erişme ve DeğiştirmeAnahtar KontrolüÇiftleri KaldırmaMap Üzerinde YinelemeÖzet - Kelime Frekansı7İleri Seviye Fonksiyonlar
Referans ile GeçmeLambda İfadelerine GirişParametreli LambdalarDönüş Değeri Olan LambdalarÖzyinelemeye GirişÖzyinelemeli FaktöriyelLambda ile Sıralama2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme