π ΠΠ°ΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΠ΅ΠΊ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² Python ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ RecursionError
ΠΠ°ΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΠ΅ΠΊ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² Python?
Π Python Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΠΈ ΡΠ±ΠΎΠ΅Π² Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΡΡΠΎ Π²Π°ΡΠ° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΠΏΡΠ΅Π΄Π΅Π» Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
import sys
sys.setrecursionlimit(new_limit)
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ new_limit
Π½Π° ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π±ΠΎΠ»ΡΡΠ΅ΠΌΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
import sys
def recursive_function(n):
if n == 0:
return
else:
recursive_function(n - 1)
sys.setrecursionlimit(10000)
recursive_function(5000)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ sys.setrecursionlimit()
, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π΄ΠΎ 10000. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ recursive_function()
Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ 5000.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΠ΅ΠΊ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² python
Π Π΅ΠΊΡΡΡΠΈΡ - ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΌΡ ΡΠ΅Π±Ρ. Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°. Π Python ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π³Π»ΡΠ±ΠΈΠ½Π° ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π°, Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°.
ΠΠ΅ΡΠΎΠ΄ sys.setrecursionlimit()
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΠ΅ΠΊ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² Python - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ setrecursionlimit() ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ sys. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ.
import sys
sys.setrecursionlimit(10000)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠ°Π²Π½ΠΎΠΉ 10000. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠΎΡΡΠΎΠΌΡ Π²Π°ΠΆΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ Π²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ.
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠΈ
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΡΠΈΠΊΠ». Π¦ΠΈΠΊΠ» Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
def factorial(n):
result = 1
for i in range(1, n+1):
result *= i
return result
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ factorial Π½Π° ΡΠΈΠΊΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΡΠΈΡΠ»Π° n. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ n.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΡΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Π° ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠΈΠΊΠ»ΠΎΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΈΠ»ΠΈ Π½Π΅ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ Π²ΠΎΡΡΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠΈ. Π₯Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ - ΡΡΠΎ ΡΠΈΠΏ ΡΠ΅ΠΊΡΡΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ Π² ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° ΡΠΈΡΠ»Π°:
def factorial(n, result=1):
if n == 0:
return result
else:
return factorial(n-1, result*n)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ². ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ setrecursionlimit() ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ sys, Π·Π°ΠΌΠ΅Π½Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΠΈΠΊΠ» ΠΈΠ»ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.