inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

322

짱구

작성한 질문수 28

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

재귀 javascript recursion 코테 준비 같이 해요!

답변 1

1

-J-

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

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

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

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

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

감사합니다 :)

71번 깊이 우선 탐색 질문드립니다.

0

201

1

이렇게 하는건 안좋은 방법일까요?

0

362

0

강의상 32번째 줄 질문드립니다

1

314

1

안녕하세요..!

0

437

0

1~100번 외의 자료에 대한 코드는 없을까요?

0

277

0

질문있습니다.

0

216

0

33번 문제 for문대신 join 사용

0

224

0

const, let

0

296

1

객체 식별자는 변수 또는 promt로 가지고 올수 없다는 건가요?

1

255

1

문자열이 둘다 숫자, 왜 가능해요?

1

239

1

20번 문제에 parseInt()로 10진수를 왜 하나요?

1

206

1

질문 있습니다.

0

219

0

문제 12번

1

207

1

선생님 이 포문이상한데요..

1

231

1

만약 1980년 1월1일 부터의 로직을 짜려면 코드 어느 부분을 수정해야할까요??

0

233

0

알고리즘 공부방법에 대해서 질문있습니다.

0

221

0

질문 드립니다!!

0

235

1

for 반복문 관련 문의

0

198

0

47번 문제 질문

0

242

1

행렬 곱에서 i,j,k를 len으로 통일시키면 2*3 3*2행열 계산이 안됨니다.

1

233

1

function문 호출하기 질문입니다~

0

221

0

8번) 점 접근자로 숫자 불가하네요!

0

155

0

병합정렬에서 질문드립니다.

0

267

1

선생님 궁금한점이있습니다.

3

167

0