SORU
27 Kasım 2012, Salı


Kuyruk özyineleme Python optimize mu?

Aşağıdaki hata ile başarısız oluyor ve aşağıdaki kod parçası var:

RuntimeError: maksimum özyineleme derinliği aşıldı

Bu kuyruk özyineleme optimizasyon AZALTILMASINA izin vermek için yeniden yazma girişiminde bulundum. Bu kod eğer bir MODELDİR gerçekleşmiş olsaydı başarılı olmuş gerektiğine inanıyorum.

def trisum(n, csum):
    if n == 0:
        return csum
    else:
        return trisum(n - 1, csum   n)

print(trisum(1000, 0))

Python MODELDİR türü olmadığını söylemek gerekir, ya da sadece farklı bir şekilde tanımlamak gerekiyor mu?

CEVAP
27 Kasım 2012, Salı


Hayır, hiç bir zaman da beri uygun tracebacks sahip olmak tercih Guido

http://neopythonic.blogspot.com.au/2009/04/tail-recursion-elimination.html

http://neopythonic.blogspot.com.au/2009/04/final-words-on-tail-calls.html

El ile böyle bir dönüşüm özyineleme ortadan kaldırabilirsiniz

>>> def trisum(n, csum):
...     while True:                     # change recursion to a while loop
...         if n == 0:
...             return csum
...         n, csum = n - 1, csum   n   # update parameters instead of tail recursion

>>> trisum(1000,0)
500500

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blendtec

    Blendtec

    30 EKİM 2006
  • brokenbellsVEVO

    brokenbellsV

    11 EYLÜL 2009
  • READ DESCRIPTION NOW!!!!!!!

    READ DESCRIP

    18 ŞUBAT 2009