再帰関数を使用する10進数=>2進数
// 1. for문으로 이진수 변환하기
function reverseStr(str) {
const arrayStr = str.split('');
arrayStr.reverse();
// join을 사용해서 다시 문자열로 변환
reverseStr = arrayStr.join('');
return reverseStr;
};
function binaryNum(num){
let result = '';
while( true ){
if( num <= 1 ){
result += num;
return reverseStr(result);
}
if( num%2 === 0 ){
result += 0;
}
else if( num%2 === 1 ){
result += 1;
}
num = parseInt( num/2 );
}
}
binaryNum(10); // 1010
/////// reverseStr 함수를 쓰지 않고 하는 방법
function binaryNum2(num){
let result = '';
while( true ){
if( num <= 1 ){
result = num + result;
return result;
}
if( num%2 === 0 ){
result = '0' + result;
}
else if( num%2 === 1 ){
result = '1' + result;
}
num = parseInt( num/2 );
}
}
binaryNum2(10); // 1010
// 2. 재귀함수로 만들기
function binaryNum(num){
// base case
if( num <= 1 ){
return '' + 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(11); // '1011'
///// 좀 더 효율적인 재귀함수 버전
// Math.floor(num/2) => 소수점 버림
function newbinaryNum(num){
if( num === 1 || num === 0 ){
return String(num);
}
// 순서가 역순으로 나오기 때문에,
// return String( num % 2 ) + newbinaryNum( Math.floor(num/2) );
return newbinaryNum( Math.floor(num/2) ) + String( num % 2 );
}
newbinaryNum(10); // 1010
// ex) console.log( newbinaryNum(11) )
// newbinaryNum(5) + String(1)
// newbinaryNum(2) + String(1)
// newbinaryNum(1) + String(0)
// 1
// => '1011'
Reference
この問題について(再帰関数を使用する10進数=>2進数), 我々は、より多くの情報をここで見つけました https://velog.io/@gil0127/재귀함수를-이용한-10진수-2진수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol