RecursionError. Это происходит, когда функция вызывает саму себя слишком много раз, превышая лимит, установленный интерпретатором для предотвращения бесконечной рекурсии и переполнения стека вызовов.
При превышении максимальной глубины рекурсии в Python, возникнет исключение RecursionError.
Что такое глубина рекурсии?
Глубина рекурсии - это количество вложенных вызовов функции самой себя, прежде чем будет достигнут базовый случай (условие выхода из рекурсии).
Почему существует ограничение?
Python, как и большинство языков программирования, ограничивает глубину рекурсии, чтобы предотвратить переполнение стека вызовов. Каждый раз, когда функция вызывается, для неё выделяется место в стеке для хранения локальных переменных, аргументов и адреса возврата. Если рекурсия слишком глубокая, стек переполняется, что приводит к ошибке.
Что происходит, когда возникает RecursionError?
Когда Python обнаруживает, что глубина рекурсии превысила установленный предел, он немедленно останавливает выполнение программы и выбрасывает исключение RecursionError.  Это предотвращает дальнейшее повреждение памяти и обеспечивает стабильность системы.  Выполнение кода останавливается, и информация об ошибке выводится в консоль (или обрабатывается блоком try...except, если он предусмотрен).
Как можно решить эту проблему?
sys.setrecursionlimit(limit), но это не решает проблему, а лишь откладывает её и может привести к другим проблемам, если стек все равно переполнится.for или while), которые не увеличивают стек вызовов, как рекурсия.Пример:
    
import sys
def recursive_function(n):
  if n == 0:
    return 0
  else:
    return recursive_function(n - 1) + 1 # Рекурсивный вызов
try:
  result = recursive_function(10000) # Вероятно вызовет RecursionError
  print(result)
except RecursionError as e:
  print(f"Произошла ошибка: {e}")
#sys.setrecursionlimit(20000) #Не делайте так! Это временное решение
def iterative_function(n):
  sum = 0
  for i in range(n + 1):
      sum += 0
  return n
result = iterative_function(10000) # Не вызовет RecursionError
print(result)