Özyinelemeli (Recursive ) Fonksiyonlar

if len(s) < 1:

Fırat ÖZGÜL’ün notlarında öz yinelemeli fonksiyonun sürekli kendi kendini çağırmasını sonlandırmak için bir dip nokta olması gerektiği yazıyor. Yukarıdaki if bloğunda bu dip nokta ayarlanmış. Eğer bu yapılmasaydı bir süre sonra string içerisinde karakter kalmayacağı için program hata verecekti.

Kodları tersine çevirme ifadesi biraz yanlış. Aşağıdaki kaynaktan bulduğum açıklama sanırım olayı biraz daha anlamamıza yardımcı olacak.

Öz Yineleme (Recursion)

Kendi kendini çağıran fonksiyonlara özyineli (recursive) fonksiyon denilir.

Çoğunlukla, döngülerle çözülebilen problemler, özyineli fonksiyonlarla çok daha kolay olarak çözülebilir. Özyineleme eylemi, problemi, en üstten başlayarak adım adım daha küçük parçalarına ayırır. Daha çok parçalanamayn en basit parçasına taban parçası denilir. Özyineleme en üstten başlayarak tabana kadar iner. Sonra tabanda bulduğu değeri geriye doğru en üste kadar taşır. Bu niteliği, döngülerden farklıdır.
Kaynak: http://www.baskent.edu.tr/~tkaracay/etudio/ders/prg/c/recursive.pdf

Yani öz yineli fonksiyon içerinde verilen parametre her seferinde küçülüyor ve dip noktaya (taban parçaya) geldiğinde return ifadesi ile yineleme işlemi durduruluyor. Taban parça (en küçük değere ulaşan parametre) döngü bittikten sonra adım adım ilk değerine getiriliyor. Fırat ÖZGÜL’ün yukarıda yaptığı örnekte azalt(s[1:]) kodundan sonraki print satırı, öz yineleme işlemi neticesinde küçülen parametre değerinin nasıl eski haline geldiğini görüp kavramamız için yazılmış. :slight_smile: