인프런 커뮤니티 질문&답변

짱구님의 프로필 이미지
짱구

작성한 질문수

제주코딩베이스캠프 Code Festival: JavaScript 100제

2진법 변환 문제 관해서 질문있습니다.

작성

·

204

1

선생님께서 보여주신 재귀함수 풀이법 말고, 저는 처음에 이런 식으로 시도해봤는데요.

값들이 다 잘 나오는데, 사실 그래서 많이 혼란스럽니다. 함수가 스스로 불려질 때마다, result가 '' 빈 문자열로 초기화 되는데, 상식적으로 생각하면, 결과값은 빈문자열이 나와야 할 것같지만, 모든 값들이 잘 나오네요.

콘솔 로그로 도중에 result 값을 찍어봐도 빈 문자열로만 나와서,  더욱더 알아낼 방법이 없네요ㅠ

어떻게 result가 초기화 되지 않고 잘 작동하는 건가요?? 

 

```

function binaryNum(num){
 let result = '';
  
  // base case
  if( num <= 1 ){
    return result + num;  
  }
  
  if( num%2 === 0 ){
    num = parseInt( num/2 );
    return binaryNum(num) + '0';
  }
  
  if( num%2 === 1 ){
    num = parseInt( num/2 );
    return binaryNum(num) + '1';
  }
  
}

binaryNum(10);

답변 1

1

-J-님의 프로필 이미지
-J-
지식공유자

안녕하세요 은길님! 답변드리겠습니다 ㅎㅎ
예시로 올려주신 코드를 실행해 보면 result 값이 사용되는 곳은, 함수가 재귀하면서 실행되는 가장 마지막 재귀함수입니다.

가령 binaryNum(10) 함수가 실행되면 

binaryNum(10) --> binaryNum(5) --> binaryNum(2) --> binaryNum(1)

이런 순서대로 재귀하게 될텐데요, 이때 가장 마지막에 실행되는 binaryNum(1) 함수에서만 result 값이 사용되며 그 용도도 num 값을 문자열로 만드는 정도로 사용하고 계시는걸로 보입니다. 그렇기 때문에 사실 보내주신 코드에서 result 라는 값을 제거하고 
console.log(binaryNum(10)); 이렇게 리턴값을 확인해봐도 문제 없이 작동하고 있습니다.

결론적으로 result 의 초기화는 위의 코드 작동에 크게 영향을 미치지 않는다고 보시면 될것 같습니다.

감사합니다 :)

짱구님의 프로필 이미지
짱구

작성한 질문수

질문하기