再帰関数を使用する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'