Özyineleme (Recursion): Kendini Çağıran Fonksiyonlar

Bir problemi çözmek için kendisinin daha küçük bir kopyasını çözmek… Kulağa döngüsel geliyor ama programlamanın en zarif fikirlerinden biri: özyineleme (recursion). Bir fonksiyonun kendi kendini çağırmasıdır.

Özyineleme nedir?

Özyineleme, bir fonksiyonun çözümü bulmak için kendini daha küçük bir girdiyle yeniden çağırmasıdır. Her çağrı problemi biraz küçültür; sonunda artık bölünemeyecek en basit hale ulaşılır ve çözüm geri sarılarak birleşir.

Temel durum (base case) şart

Her özyinelemeli fonksiyonun bir durma noktası olmalıdır; buna temel durum denir. Temel durum yoksa fonksiyon sonsuza kadar kendini çağırır ve program çöker. Bu, özyinelemedeki en yaygın hatadır.

Klasik örnek: faktöriyel

Faktöriyel, özyinelemenin ders kitabı örneğidir; çünkü tanımı zaten özyinelemelidir:

def faktoriyel(n):
    if n <= 1:        # temel durum
        return 1
    return n * faktoriyel(n - 1)

print(faktoriyel(5))   # 120

Ne zaman kullanmalı?

Özyineleme; klasörler, ağaç yapıları ve iç içe geçmiş veriler gibi doğal olarak "kendini tekrar eden" problemlerde çok zarif çözümler verir. Ama basit tekrarlar için döngü genelde daha hızlı ve anlaşılırdır. Kavram için özyineleme sayfasına bakabilirsiniz.

İşin hocası ne yapar?

İşin hocası özyinelemeyi yazmadan önce iki şeyi netleştirir: nerede duracak ve her adımda problem gerçekten küçülüyor mu?

İlgili yazı: Python’da Test Yazmak

Sıkça Sorulan Sorular

Özyineleme (recursion) nedir?

Bir fonksiyonun, çözümü bulmak için kendisini daha küçük bir girdiyle yeniden çağırmasıdır. Her çağrı problemi küçültür ve sonunda en basit duruma ulaşılır.

Temel durum (base case) nedir ve neden zorunludur?

Temel durum, özyinelemenin duracağı noktadır. Olmadığında fonksiyon kendini sonsuza kadar çağırır ve program çöker; bu yüzden her özyinelemeli fonksiyonda mutlaka bulunmalıdır.

Özyineleme mi döngü mü kullanmalıyım?

Klasörler ve ağaç yapıları gibi doğal olarak kendini tekrar eden problemlerde özyineleme çok zariftir. Basit tekrarlar için ise döngüler genellikle daha hızlı ve daha anlaşılırdır.

Yorum yapın