SORU
23 Temmuz 2010, Cuma


Maksimum yineleme derinliğini?

Bu kuyruk özyinelemeli fonksiyon var:

def fib(n, sum):
    if n < 1:
        return sum
    else:
        return fib(n-1, sum n)

c = 998
print(fib(c, 0))

=997, n sonları çalışır ve "maksimum yineleme derinliğini karşılaştırıldığında," RuntimeError. aşmış bir tükürür Bu sadece bir yığın taşması mı? Bir şekilde etrafından dolaşan bir yol var mı?

CEVAP
23 Temmuz 2010, Cuma


Yığın, Evet taşma karşı koruma. Python (ya da daha doğrusu, CPython uygulanması. kuyruk özyineleme optimize değil, ve dizginsiz özyineleme neden yığın uzaklıklarını aşıyor. sys.setrecursionlimit, ama bunu yaparken standart sınırı biraz muhafazakar tehlikeli, ama Python stackframes oldukça büyük olabilir özyineleme sınırı değiştirebilirsiniz.

Python işlevsel bir dil değil ve kuyruk özyineleme özellikle etkili bir yöntem değildir. Algoritma yinelenen yeniden yazma mümkünse, genellikle daha iyi bir fikir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elliot Davin

    Elliot Davin

    28 Kasım 2008
  • MuscleProdigyTV

    MuscleProdig

    8 Ocak 2011
  • xiaoyu85

    xiaoyu85

    20 ŞUBAT 2010