@KaZ112

Ошибка: RecursionError: maximum recursion depth exceeded while getting the str of an object, как исправить?

Есть вот такой вот код
lim = int(input("Сколько чисел найти? "))
def afto(lim, x = 0):
    if lim == 0:
        return
    if x ** 2 % 10 ** len(str(x)) == x:
        print(x)
        return afto(lim - 1, x + 1)
    else:
        return afto(lim, x + 1)
afto(lim)

Так вот, первые 8 чисел находит, а дальше выскакивает такая ошибка, в чем проблема?
  • Вопрос задан
  • 9814 просмотров
Пригласить эксперта
Ответы на вопрос 2
kgb_zor
@kgb_zor
I need your traceback.
sys.setrecursionlimit(limit)
Ответ написан
Комментировать
@bbkmzzzz
((x**2)%int("1" + "0" * (len(str(x)))) == x):

можно упростить до:

x ** 2 % 10 ** len(str(x)) == x:

Рекурсия, однако. Точка выхода из рекурсии тут одна lim == 0, но:

Первое условие проверяет, что lim == 0 и выходит, отлично

Далее сложное условие, если все ок, печатаем х и вызываем себя, меняя lim и х
если нет - МЕНЯЕМ Х и НЕ МЕНЯМ lim - вызываем себя - проходим условие 1, 2 снова не выполняется, МЕНЯЕМ Х и НЕ МЕНЯМ lim - вызываем себя -> и так далее до максимальной глубины кроличьей норы.

если x ** 2 % 10 ** len(str(x)) это условие все-таки может выполниться на больших значениях Х - делайте через циклы, не рекурсию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы