JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptの再帰関数で10進数から2進数への変換を実装する方法

概要

数値を唯一の引数として受け取り、その数値を2進数表記に変換した文字列を返すJavaScript関数を作成します。本記事では、ループ処理ではなく再帰(recursion)を使った実装方法をわかりやすく解説します。

期待する動作は以下のとおりです。

f(4) = '100'
f(1000) = '1111101000'
f(8) = '1000'

サンプルコード

const decimalToBinary = (num) => {
  if(num >= 1) {
    // 奇数の場合:(num - 1) / 2 に対して再帰呼び出しを行い、
    // 余りの1を末尾に連結する
    if (num % 2) {
      return decimalToBinary((num - 1) / 2) + 1;
    } else {
      // 偶数の場合:num / 2 に対して再帰呼び出しを行い、
      // 末尾に「0」を連結する
      return decimalToBinary(num / 2) + 0;
    }
  } else {
    // 終了条件(ベースケース)
    return '';
  };
};
console.log(decimalToBinary(4));
console.log(decimalToBinary(1000));
console.log(decimalToBinary(8));

コードの仕組み

この関数は、10進数を2で割り続けることで各桁のビットを求め、再帰の戻り値に文字列として連結していきます。処理の流れは次のとおりです。

  • 終了条件: 引数 num が1未満になった時点で空文字列を返し、再帰を停止します。
  • 奇数の場合: num % 2 が真であれば、(num - 1) / 2 を引数に再帰呼び出しを行い、その結果に「1」を連結します。
  • 偶数の場合: num / 2 を引数に再帰呼び出しを行い、その結果に「0」を連結します。
  • 再帰が深くなるにつれて上位の桁から順に確定し、文字列の連結により最終的な2進表記が完成します。

なお、標準APIを使いたい場合は (4).toString(2) のように Number.prototype.toString() でも同様の結果が得られますが、再帰による自前実装はアルゴリズムの学習に最適です。

実行結果

コンソールには以下が出力されます。

100
1111101000
1000
  1. Pythonで10進数を2進数のリストに変換する方法

    Pythonは柔軟性の高いプログラミング言語であり、データ処理の中で発生するさまざまな要件に対応できます。10進数の数値を2進数に変換し、さらに各桁をリストとして扱いたい場合には、以下に紹介する2つの方法が便利です。format関数を使う方法書式指定子(フォーマッター)に使う文字によって、数値を10進数・16進数・8進数・2進数など、任意の基数でフォーマットできます。以下の例では、書式指定として0:0bを使用し、format関数に2進数へ変換したい整数を渡しています。その後、文字列化した2進数を1文字ずつint型に変換してリストを作成します。コード例Dnum = 11 print(与えられた

  2. 【Python入門】再帰関数を使って10進数を2進数に変換する方法

    10進数を2進数に変換する基本の考え方 10進数を2進数に変換するには、対象の数を2で繰り返し割り算をし、そのたびに得られる余りを記録します。そして計算が終わった後、余りを逆順に出力すると、それが目的の2進数表現になります。 この一連の処理は、再帰(リカージョン)を使うことで非常に簡潔に実装できます。以下がその再帰的な解法です。 再帰を使ったPythonコード def tobin(x): if x > 1: tobin(x // 2) print(x % 2, end=) num = int(input(enter a number)) tobin(nu