Öz Yinelemeli (Recursive) Fonksiyonlar
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 8 / 68.
Özyineleme (Recursion), bir fonksiyonun bir problemi çözmek için kendisini çağırdığı bir programlama tekniğidir. Bu, döngü benzeri bir davranış oluşturur; ancak geleneksel döngüler kullanmak yerine, fonksiyon bir çözüme ulaşana kadar değiştirilmiş parametrelerle kendisini tekrar tekrar çağırır.
Her özyinelemeli (recursive) fonksiyonun doğru çalışması için iki temel bileşene sahip olması gerekir:
Taban Durumu: Bu, özyinelemeyi (rekürsiyonu) durduran koşuldur. Bu olmadan, fonksiyon kendisini sonsuza kadar çağırır ve programınızın çökmesine neden olur. Taban durumu, fonksiyonun kendisini tekrar çağırmak yerine ne zaman bir sonuç döndürmesi gerektiğini tanımlar.
Özyinelemeli Adım: Burası, fonksiyonun orijinal problemin değiştirilmiş bir versiyonuyla kendisini çağırdığı ve kademeli olarak temel duruma (base case) doğru ilerlediği yerdir.
İşte faktöriyel hesaplayan özyinelemeli bir fonksiyonun basit bir örneği:
<?php
function factorial($n) {
// Temel durum: 1'in faktöriyeli 1'dir
if ($n <= 1) {
return 1;
}
// Özyinelemeli (recursive) adım: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // Çıktı: 120
?>Bu örnekte, factorial(5); factorial(4)'ü çağırır, o factorial(3)'ü çağırır ve bu şekilde factorial(1)'e (temel durum) ulaşana kadar devam eder. Ardından sonuçlar geriye doğru çarpılır: 1 × 2 × 3 × 4 × 5 = 120.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayPozitif bir tam sayı alan ve bu sayının rakamlarının toplamını döndüren sumDigits adında özyinelemeli (recursive) bir fonksiyon oluşturun. Fonksiyon, sayıyı rakam rakam parçalamak için özyineleme kullanmalıdır.
Bir girdi alacaksınız: pozitif bir tam sayı. Girdiyi okuyun, özyinelemeli fonksiyonunuzu bu sayı ile çağırın ve rakamlarının toplamını yazdırın.
Girdi formatı: Pozitif bir tam sayı içeren tek bir satır
Beklenen çıktı: Sayıdaki tüm rakamların toplamı
Kopya kağıdı
Özyineleme (Recursion), bir fonksiyonun bir problemi çözmek için kendisini çağırdığı bir programlama tekniğidir. Her özyinelemeli fonksiyonun iki bileşene ihtiyacı vardır:
Temel Durum (Base Case): Sonsuz döngüleri önlemek için özyinelemeyi durduran koşul.
Özyinelemeli Adım (Recursive Step): Fonksiyonun, temel duruma doğru ilerleyerek kendisini değiştirilmiş parametrelerle çağırdığı yerdir.
Özyinelemeli bir faktöriyel fonksiyonu örneği:
<?php
function factorial($n) {
// Temel durum: 1'in faktöriyeli 1'dir
if ($n <= 1) {
return 1;
}
// Özyinelemeli adım: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // Çıktı: 120
?>Kendin dene
<?php
// Girdiyi oku
$number = intval(fgets(STDIN));
// YAPILACAK: Özyinelemeli sumDigits fonksiyonunuzu burada oluşturun
// Fonksiyonu çağırın ve sonucu yazdırın
echo sumDigits($number);
?>Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Fonksiyonlar
Anonim FonksiyonlarClosure'lar ve 'use'Ok Fonksiyonları (Arrow Functions)Geri Çağırma (Callback) Fonksiyonları'call_user_func' KullanımıDeğişken FonksiyonlarReferans ile Değer AktarımıÖz Yinelemeli (Recursive) FonksiyonlarÖzet: Fonksiyon Karması4Çok Boyutlu Diziler
2 Boyutlu Dizi Oluşturma2 Boyutlu Dizi Elemanlarına Erişme2 Boyutlu Dizi Elemanlarını Değiştirmeİç İçe Döngülerle Yineleme2 Boyutlu İlişkisel DizilerÖzet: Basit Izgara Egzersizi2İleri Düzey Dizi İşlemleri
'array_push' ile Ekleme'array_pop' ile Silme'array_unshift' ile Ekleme'array_shift' ile Silmeİndisli Dizileri Birleştirmeİlişkisel Dizileri Birleştirme'array_slice' ile Kesit Alma'in_array' ile Değer Kontrolü'array_search' ile Anahtar AramaÖzet: Çalma Listesi Alıştırması3Dizileri Sıralama
İndisli Dizileri Artan Sırada Sıralamaİndisli Dizileri Azalan Sırada Sıralamaİlişkisel Dizileri Değere Göre Sıralamaİlişkisel Dizileri Anahtara Göre SıralamaDoğal Sıralama (Natural Order)'usort' ile Özel SıralamaÖzet: Liderlik Tablosu Sıralama