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

  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • ::..ηєѕѕ мιχ..::

    ::..ηєѕѕ

    15 Aralık 2006
  • TouchePro

    TouchePro

    27 EYLÜL 2007