재귀함수로 팩토리얼을 구하시오
function solution(targeNumber) {
let answer = 1;
function DFS(number) {
if (number === targeNumber + 1) {
return;
} else {
answer *= number;
DFS(number + 1);
}
}
DFS(1);
return answer;
}
console.log(solution(5)); //120
function solution(number) {
let answer;
function DFS(number) {
if (number === 1) return 1;
else return number * DFS(number - 1);
}
answer = DFS(number);
return answer;
}
console.log(solution(4));
- number 로 1 이 주어졌을 때 재귀함수가 돌 필요가 없으니 바로 1을 return 해준다
- 재귀함수를 멈추게 하는 조건이다
- DFS(4)일 때 else 부분에서 4 x DFS(3) 에서 멈추고 다시 자기자신을 호출한다
- DFS(3) 일 때 3 x DFS(2) 에서 멈추고 다시 자기 자신을 호출한다
- DFS(2) 일 때 2 x DFS(1) 에서 멈추고 다시 자기 자신을 호출한다
텍스트여기서 부터 중요 !!! number가 1일 때 if문을 만나 return 을 시작하게 된다- DFS(1)은 1을 return 한다
- DFS(2) 일 때 2 x DFS(1) 여기로 돌아가게 되는데 DFS(1)은 1이므로 2 x 1을 해서 DFS(2)가 return 하는 값은 2이 된다
- 그 다음 DFS(3)으로 돌아가고 DFS(3) 6을 return한다
- 그 다음 4 x DFS(3)으로 돌아가고 24를 return 해서 답은 24가 된다
잠시 절교했었던 재귀함수랑 조금 친해진 것 같아 기쁘다
앞으로 이해가 안가더라도 차근차근 콜스택이 어떻게 진행되는지 적어가며 풀어봐야겠다