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.