Jump to content
Üyelik kaydınızı yaparak son yazılan içeriklerden haberdar olun! ×
  • entries
    16
  • comments
    0
  • views
    108,776

Kuyruk Özyinelemesi (Tail Recursion)


Doğuhan ELMA

179 views

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.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...