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ş:
Neden't değil .Kuyruk özyineleme ...
Herhangi bir Javascript motorları kuyr...
Kuyruk özyineleme tam olarak nasıl çal...
Varsa hangi C derleyicileri kuyruk özy...
Nasıl olursa gcc kuyruk özyineleme opt...