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

  • andyabc45

    andyabc45

    1 Mayıs 2011
  • Bokeh

    Bokeh

    9 HAZİRAN 2014
  • GenTechPC

    GenTechPC

    1 Temmuz 2007