Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Объясните причину ошибки Python

Арсений Виниченко Ученик (48), на голосовании 1 месяц назад
 i = int(input("year: ")) 

def bu():
schet = 1
stoletia = 0
stoletia_1 = 100

if i > stoletia and i < stoletia_1:
print(f"{schet} столетие")
else:
schet += 1
stoletia += 100
stoletia_1 += 100
bu()
bu()

ошибка

File "c:\Users\user\Desktop\main.py", line 14, in bu
bu()
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded
Голосование за лучший ответ
Анатолий Зяблин Просветленный (28328) 2 месяца назад
Ошибка, которую вы получаете, называется "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)
Этот код будет работать корректно и избежит ошибки рекурсии. Однако для такой задачи лучше использовать итеративный подход или простую математическую формулу.
Похожие вопросы