작성
·
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
안녕하세요 은길님! 답변드리겠습니다 ㅎㅎ
예시로 올려주신 코드를 실행해 보면 result 값이 사용되는 곳은, 함수가 재귀하면서 실행되는 가장 마지막 재귀함수입니다.
가령 binaryNum(10) 함수가 실행되면
binaryNum(10) --> binaryNum(5) --> binaryNum(2) --> binaryNum(1)
이런 순서대로 재귀하게 될텐데요, 이때 가장 마지막에 실행되는 binaryNum(1) 함수에서만 result 값이 사용되며 그 용도도 num 값을 문자열로 만드는 정도로 사용하고 계시는걸로 보입니다. 그렇기 때문에 사실 보내주신 코드에서 result 라는 값을 제거하고
console.log(binaryNum(10)); 이렇게 리턴값을 확인해봐도 문제 없이 작동하고 있습니다.
결론적으로 result 의 초기화는 위의 코드 작동에 크게 영향을 미치지 않는다고 보시면 될것 같습니다.
감사합니다 :)