((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)) это условие все-таки может выполниться на больших значениях Х - делайте через циклы, не рекурсию.