해피 넘버
행복한 숫자는 각 자릿수의 제곱의 합으로 대치될 때 결국 1에 도달하는 숫자입니다. 이 과정에서 숫자가 반복되면 주기가 무한대로 실행되며 이러한 숫자를 불행한 숫자라고 합니다.
예를 들어 - 13은 행복한 숫자입니다.
1^2 + 3^2 = 10 and, 1^2 + 0^2 = 1
반면에 36은 불행한 숫자입니다.
숫자가 행복한 숫자인지 여부를 결정하기 위해 재귀를 사용하는 함수를 작성해야 합니다.
따라서 이 함수를 작성해 보겠습니다. 이 함수의 핵심은 이미 나타난 숫자의 기록을 유지해야 한다는 것입니다. 같은 숫자가 또 나타나면 거짓이 되고 제곱된 숫자의 합이 1이면 참을 반환합니다.
우리는 이미 나타난 숫자를 추적하기 위해 객체를 사용할 것입니다. setor Map을 사용할 수도 있지만, 간단한 객체로도 이를 수행할 수 있습니다.
그렇게 하는 코드는 -
예시
const squareSumRecursively = (n, res = 0) => { if(n){ return squareSumRecursively(Math.floor(n/10), res+Math.pow((n%10),2)); }; return res; }; const isHappy = (num, map = {}) => { if(num !== 1){ if(map[num]){ return false; } map[num] = 1; return isHappy(squareSumRecursively(num), map); }; return true; } console.log(isHappy(36)); console.log(isHappy(13)); console.log(isHappy(36)); console.log(isHappy(23));
출력
콘솔의 출력은 다음과 같습니다. -
false true false true