팩토리얼

.·2021년 8월 10일
0

알고리즘

목록 보기
15/21

재귀함수로 팩토리얼을 구하시오

      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));

if(number===1) return 1 의 의미

  1. number 로 1 이 주어졌을 때 재귀함수가 돌 필요가 없으니 바로 1을 return 해준다
  2. 재귀함수를 멈추게 하는 조건이다

answer = DFS(number) 이 부분이 return 했을 때 어떻게 돌아가는지 잘 이해가 되지 않았다

  1. DFS(4)일 때 else 부분에서 4 x DFS(3) 에서 멈추고 다시 자기자신을 호출한다
  2. DFS(3) 일 때 3 x DFS(2) 에서 멈추고 다시 자기 자신을 호출한다
  3. DFS(2) 일 때 2 x DFS(1) 에서 멈추고 다시 자기 자신을 호출한다
    텍스트여기서 부터 중요 !!! number가 1일 때 if문을 만나 return 을 시작하게 된다
  4. DFS(1)은 1을 return 한다
  5. DFS(2) 일 때 2 x DFS(1) 여기로 돌아가게 되는데 DFS(1)은 1이므로 2 x 1을 해서 DFS(2)가 return 하는 값은 2이 된다
  6. 그 다음 DFS(3)으로 돌아가고 DFS(3) 6을 return한다
  7. 그 다음 4 x DFS(3)으로 돌아가고 24를 return 해서 답은 24가 된다

잠시 절교했었던 재귀함수랑 조금 친해진 것 같아 기쁘다
앞으로 이해가 안가더라도 차근차근 콜스택이 어떻게 진행되는지 적어가며 풀어봐야겠다

profile
Divde & Conquer

0개의 댓글

관련 채용 정보