1

10 進数のバイナリ表現を計算するために js で再帰関数を記述したいと考えていました。

私はこれを解決することができました:

var t = (function f(n, s)
{
    return((s = (n % 2) + s) && (n == 0)) ? s : f(Math.floor(n / 2), s);
})(4, '');

console.log(t);

フィドル: http://jsbin.com/ihezev/3/edit

ただし、先頭のゼロを取り除くことはできません。

したがって、IIFE を 7 で実行すると、次の結果が得られ 0111ます111

どうすれば先頭を取り除くことができ0ますか?

(文字列置換ソリューションなしでお願いします。できる限りエレガントに保ちたい..できることはわかっていますalert(Number(234).toString(2))が、この質問は再帰としてタグ付けされています。)

4

4 に答える 4

2

少し変更されましたが、まだエレガントです。

var t = (function f(n, s) {
    return n === 0 ? s || "0" : f(~~(n / 2), (n % 2) + s);
})(7, "");  // "111"
于 2013-01-18T12:28:15.797 に答える
1

function base10ToString(num, str = "") {
  if (num === 0) {
    return str;
  }
  if (num % 2 === 0) str = "0" + str;
  else str = "1" + str;
  return base10ToString(Math.floor(num / 2), str);
}
console.log(base10ToString(7));

于 2021-03-15T15:55:01.023 に答える
0

1まだ作成したかどうかを表すパラメーターを渡す必要があります。そのパラメータは ですがfalse、 に対しては何も生成しません0

于 2013-01-18T12:05:37.663 に答える