Bu eğitimde, özyinelemeli bir işlev (kendini çağıran bir işlev) oluşturmayı öğreneceksiniz.
Özyineleme nedir?
Özyineleme, bir şeyi kendi açısından tanımlama sürecidir.
Fiziksel bir dünya örneği, iki paralel aynayı birbirine bakacak şekilde yerleştirmek olacaktır. Aralarında bulunan herhangi bir nesne özyinelemeli olarak yansıtılır.
Python Özyinelemeli İşlevi
Python'da, bir işlevin diğer işlevleri çağırabileceğini biliyoruz. Fonksiyonun kendisini çağırması bile mümkündür. Bu tür yapılar, özyinelemeli işlevler olarak adlandırılır.
Aşağıdaki görüntü, adı verilen özyinelemeli bir işlevin çalışmasını göstermektedir recurse
.

Aşağıda, bir tamsayının faktöriyelini bulmak için bir özyinelemeli işlev örneği verilmiştir.
Bir sayının faktöriyeli, 1'den o sayıya kadar olan tüm tam sayıların çarpımıdır. Örneğin, 6'nın faktöriyeli (6! Olarak gösterilir) 1 * 2 * 3 * 4 * 5 * 6 = 720'dir.
Özyinelemeli işlev örneği
def factorial(x): """This is a recursive function to find the factorial of an integer""" if x == 1: return 1 else: return (x * factorial(x-1)) num = 3 print("The factorial of", num, "is", factorial(num))
Çıktı
3'ün faktöriyeli 6'dır
Yukarıdaki örnekte, factorial()
kendisini çağırdığı şekliyle özyinelemeli bir işlevdir.
Bu işlevi pozitif bir tamsayı ile çağırdığımızda, sayıyı azaltarak kendini yinelemeli olarak çağıracaktır.
Her işlev, bire eşit olana kadar sayıyı altındaki sayının faktöriyeliyle çarpar. Bu yinelemeli çağrı, aşağıdaki adımlarda açıklanabilir.
factorial (3) # 3 ile 1. çağrı 3 * faktöryel (2) # 2 3 * 2 * faktörlü (1) ile 2. çağrı # 1 3 * 2 * 1 ile 3. çağrı # 3. çağrıdan numara olarak geri dönüş = 1 3 * 2 # 2. aramadan dönüş 6 # 1. aramadan dönüş
Neler olup bittiğini adım adım gösteren bir resme bakalım:

Özyinelememiz, sayı 1'e düştüğünde sona erer. Buna temel koşul denir.
Her özyinelemeli işlev özyinelemeyi durduran bir temel koşula sahip olmalıdır, aksi takdirde işlev kendisini sonsuza kadar çağırır.
Python yorumlayıcısı, yığın taşmalarıyla sonuçlanan sonsuz özyinelemelerden kaçınmaya yardımcı olmak için özyinelemenin derinliğini sınırlar.
Varsayılan olarak, maksimum özyineleme derinliği 1000'dir. Sınır aşılırsa, sonuçlanır RecursionError
. Böyle bir duruma bakalım.
def recursor(): recursor() recursor()
Çıktı
Traceback (en son çağrı son): Dosya "", satır 3, Dosya "", satır 2, Dosya "", satır 2, Dosya "", satır 2, bir (Önceki satır 996 kez daha tekrarlandı ) RecursionError: maksimum yineleme derinliği aşıldı
Özyinelemenin Avantajları
- Özyinelemeli işlevler, kodun temiz ve zarif görünmesini sağlar.
- Karmaşık bir görev, özyineleme kullanılarak daha basit alt problemlere bölünebilir.
- Sıra oluşturma, bazı iç içe yinelemeleri kullanmaktan çok özyinelemeyle daha kolaydır.
Özyinelemenin Dezavantajları
- Bazen özyinelemenin arkasındaki mantığı takip etmek zordur.
- Özyinelemeli aramalar, çok fazla bellek ve zaman kapladıkları için pahalıdır (verimsizdir).
- Özyinelemeli işlevlerde hata ayıklamak zordur.