1

我想在 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

但是,我无法摆脱前导零。

因此,如果我使用 7 执行 IIFE,它会产生 : 0111并且我想要111

我怎样才能摆脱领先0

(请不要使用字符串替换解决方案。我想尽可能保持优雅。我知道我可以做到alert(Number(234).toString(2)),但这个问题被标记为递归。)

4

4 回答 4

4

这是我从python移植的一个干净的

const decToBi = num => num === 0 ? 0 : num % 2 + 10 * decToBi(Math.floor(num / 2));
console.log(decToBi(10)); //1010

于 2019-01-25T23:54:09.720 回答
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,但您不会为 a 生成任何内容0

于 2013-01-18T12:05:37.663 回答