sys.getrecursionlimit() și sys.setrecursionlimit() în Python

Interpretorul (sys) Python 3.0+

Limita de adâncime a apelurilor recursive, peste care apare RecursionError.

Sintaxă
sys.getrecursionlimit()
sys.setrecursionlimit(limita)

Ce face sys.getrecursionlimit() și sys.setrecursionlimit()

Python oprește recursivitatea foarte adâncă, implicit la aproximativ 1000 de apeluri imbricate, cu RecursionError, ca să nu depășească stiva. setrecursionlimit() poate mări limita, dar o valoare prea mare poate opri brusc interpretorul. De obicei este mai bine să transformi recursivitatea într-o buclă.

Parametri

Parametru Descriere
limita Noua adâncime maximă.

Ce returnează

getrecursionlimit: întreg.

Exemple

Exemplul 1: Limita și depășirea ei

import sys
def adancime(n):
    return 0 if n == 0 else 1 + adancime(n - 1)

print(sys.getrecursionlimit())
try:
    adancime(5000)
except RecursionError as e:
    print("RecursionError:", e)
sys.setrecursionlimit(10_000)
print(adancime(5000))

Rezultat

1000
RecursionError: maximum recursion depth exceeded
5000

Greșeli frecvente

  • Mărești limita la valori uriașe (un milion) și programul se oprește cu „Segmentation fault” în loc de o excepție.

Comenzi înrudite

  • def: Definește o funcție: un bloc de cod cu nume, pe care îl poți apela de oricâte ori.
  • functools.lru_cache() și functools.cache(): Memorează rezultatele unei funcții, ca apelurile repetate cu aceleași argumente să fie instantanee.