Задача на нахождение счастливого числа

Есть такая задача

Я решил, но только наполовину, то есть мне нужно как-то рекурсивно запускать for чтобы он продолжал суммировать квадраты цифр пока не упрется в условие что сумма равна 1, но он только один раз делает и все, поэтому не работает как нужно. Подскажите как это реализовать. Спасибо.

class Solution(object):
def isHappy(self, n):
    store = set()
    sum = 0
    n = str(n)

    while n > 1:
        for digit in n:
            digit = int(digit)
            sum += pow(digit,2)
        if sum in store:
            return isHappy(n)
        else:
            return

Ответы (1 шт):

Автор решения: MBo

Не обязательно использовать рекурсию, можно в цикле заменять n на полученную сумму. Для выявления цикла используем множество.

Accepted на leetcode:

class Solution:
    def isHappy(self, n: int) -> bool:
        store = set()
        while n > 1:
            sm = 0
            sn = n
            while sn:
                digit = sn % 10
                sm +=digit * digit
                sn //= 10
            if sm in store:
                return False
            elif sm > 1:
                store.add(sm)
            n = sm
        return True

 >>> 12 False
 >>> 13 True

Вот с рекурсией, Accepted

class Solution:
    def isHappy(self, n: int) -> bool:
        store = set()
        def ish(n: int) -> bool:    
            sm = 0
            sn = str(n)
            for digit in sn:
                digit = int(digit)
                sm += digit * digit
            if sm == 1:
                return True    
            if sm in store:
                return False
            else:
                store.add(sm)
                return ish(sm)
        return ish(n)
→ Ссылка