💫 나는 그냥 for문으로 풀었는데 오늘 배운 삼항연산자로 푸는 방법이 있어서 챗지피티한테 자세한 답변을 물어봤다.
function solution(n, a=0, b=0) {
return n <= a / 2 ? b : solution(n, a + 1, b += n % a ? 0 : a);
}
n <= a / 2 ? b : ...
이것은 재귀 호출을 종료하는 역할을 합니다. a가 n / 2보다 커지면 재귀를 멈추고 최종적으로 b의 값을 반환하는 거예요.
n <= a / 2 ? b : solution(n, a + 1, b += n % a ? 0 : a);
b += n % a ? 0 : a
이렇게 재귀를 통해 a를 1씩 증가시키면서 n의 약수인 값들을 b에 더해 나가는 구조입니다.
만약 n = 10이라면:
처음에 a = 1, b = 0으로 시작합니다.
10 % 1은 0이므로, b에 1을 더해 b = 1이 됩니다.
재귀가 호출되면서 a는 2로 증가, 10 % 2는 0이므로 b = 1 + 2 = 3.
이런 식으로 a가 n / 2를 넘기 전까지 재귀 호출이 반복됩니다.
이 함수는 주어진 숫자 n의 약수를 찾아 모두 더한 후 반환합니다. a가 n의 약수일 때마다 b에 a를 더하고, a가 n/2를 초과하면 종료됩니다.