Kuyruk Özyinelemesi (Tail Recursion)
Tail recursion, bir fonksiyonun son işlemi olarak kendisini çağırması durumudur. Yani, bir fonksiyonun son adımı başka bir fonksiyon çağrısıdır ve bu çağrı kendisine (yani aynı fonksiyona) yapılmıştır. Bu durum, özyinelemeli çağrının fonksiyonun "kuyruğunda" olduğu için "kuyruk özyinelemesi" olarak adlandırılır.
Kuyruk özyinelemesi genellikle daha verimli bir şekilde uygulanabilir çünkü çağrı yığınını büyütmek yerine, önceki çağrının hafıza alanını kullanabilir. Ancak, Python gibi bazı diller kuyruk özyinelemesini otomatik olarak optimize etmez ve bu durumda kuyruk özyinelemesi, özyinelemeyi döngülere dönüştürerek "elimine edilebilir".
Örneğin, bir sayının faktöriyelini hesaplamak için kuyruk özyinelemesini kullanan bir Python fonksiyonu aşağıdaki gibi olabilir:
def factorial(n, acc=1): if n == 0: return acc else: return factorial(n-1, n*acc)
Bu kod, factorial fonksiyonunu son işlem olarak çağırdığından ve toplam şu ana kadar hesaplanmış sonucu (acc) geçtiğinden, kuyruk özyinelemesini kullanır.
Ancak, Python kuyruk özyinelemesini optimize etmediği için, bu kod yüksek n değerleri için hata verebilir. Bunun yerine, özyinelemeyi bir döngüye çevirebiliriz:
def factorial(n): acc = 1 for i in range(1, n+1): acc *= i return acc
Bu kod, orijinal fonksiyonun yaptığı aynı hesaplamaları yapar, ancak özyinelemeyi kullanmaz ve bu nedenle daha büyük n değerleri için hata vermeyecektir.
0 Comments
Recommended Comments
There are no comments to display.