Sonsuz Rekürsiyon (Recursive) Nedir?
Diyelim ki, bir fonksiyon bir şekilde kendisini çağırıyor ve buna bir durdurma koşulu eklemediniz. Bu durumda, Python programınız bir süre sonra bu hatayı verecektir:
```
RecursionError: maximum recursion depth exceeded in comparison
```
Bu, Python'un her fonksiyon çağrısında ne kadar derine inebileceğini belirleyen bir sınır vardır. Bu sınır aşılınca, Python sizin için "Infinite Recursion Detected" hatasını verir.
Sonsuz Rekürsiyon Hatası Neden Oluşur?
- Durdurma Koşulu Eksikliği: Fonksiyonun kendisini çağırmaya devam etmesini engelleyecek bir koşul eklemediniz.
- Yanlış Koşul Kullanımı: Durum kontrolü yanlış yapılandırılmış olabilir ve fonksiyon her zaman kendini çağırmaya devam eder.
Sonsuz Rekürsiyon Hatasının Çözümü
Örneğin, aşağıdaki kodda bir hata yapalım:
def factorial(n):
if n == 0:
return 1
return n * factorial(n) # Sonsuz rekürsiyon burada başlar!
Yukarıdaki kodda, fonksiyon kendi kendini çağırmaya devam eder. Durum kontrolünü doğru şekilde eklememişiz. Fonksiyon kendisini durmaksızın çağıracağı için, "Infinite Recursion Detected" hatasını alırız.
Bu hatayı önlemek için, doğru durdurma koşulunu eklememiz gerekecek. Aşağıdaki gibi düzeltilmiş bir kod:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1) # Burada doğru bir durdurma koşulu eklenmiştir.
Bu düzenleme ile, fonksiyon artık kendisini doğru bir şekilde çağıracak ve doğru sonucu verecektir.
Sonsuz Rekürsiyonun Diğer Çözümleri
import sys
sys.setrecursionlimit(10000) # Rekürsiyon limitini artırıyoruz
Ancak bu çözüm genellikle önerilmez. Çünkü Python’un varsayılan rekürsiyon derinliği, çoğu durumda yeterli olacaktır. Eğer çok yüksek bir derinlik gerekiyorsa, algoritma yapınızda bir değişiklik yapmayı düşünmelisiniz.
2. Yinelemeli (Iterative) Çözümler: Sonsuz rekürsiyonu önlemek için fonksiyonunuzu yinelemeli hale getirmek de bir çözüm olabilir. Örneğin, yukarıdaki faktöriyel örneğini yinelemeli bir şekilde yazabiliriz:
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
Yinelemeli çözüm, rekürsiyona kıyasla daha verimli olabilir.