Ошибка, которую вы получаете, называется "RecursionError: maximum recursion depth exceeded". Это означает, что функция `bu()` вызывает сама себя слишком много раз, превышая максимальную глубину рекурсии, допустимую в Python.
Причины ошибки:
1. Бесконечная рекурсия: Ваша функция `bu()` вызывает сама себя в блоке `else`, но не имеет условия выхода из рекурсии. Это приводит к бесконечным вызовам функции.
2. Неправильная логика: Значения `stoletia` и `stoletia_1` обновляются внутри функции, но эти изменения не сохраняются между рекурсивными вызовами. Каждый новый вызов `bu()` начинает с исходных значений.
3. Отсутствие проверки верхней границы: Нет проверки для случаев, когда введенный год больше, чем последнее рассматриваемое столетие.
Чтобы исправить эту ошибку, вам нужно:
1. Передавать обновленные значения `schet`, `stoletia` и `stoletia_1` в рекурсивный вызов.
2. Добавить условие выхода из рекурсии.
3. Рассмотреть использование итеративного подхода вместо рекурсивного для этой задачи.
Вот исправленный вариант кода:
def bu(i, schet=1, stoletia=0, stoletia_1=100):
if i > stoletia and i <= stoletia_1:
print(f"{schet} столетие")
elif i > stoletia_1:
bu(i, schet + 1, stoletia + 100, stoletia_1 + 100)
else:
print("Некорректный ввод года")
i = int(input("year: "))
bu(i)
Этот код будет работать корректно и избежит ошибки рекурсии. Однако для такой задачи лучше использовать итеративный подход или простую математическую формулу.
ошибка
File "c:\Users\user\Desktop\main.py", line 14, in bu
bu()
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded