【问题标题】:Decimal to binary recursive function in JavaScriptJavaScript中的十进制到二进制递归函数
【发布时间】:2021-03-15 23:55:01
【问题描述】:

我想在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)),但这个问题被标记为递归。) p>

【问题讨论】:

    标签: javascript recursion binary


    【解决方案1】:

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

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

    【讨论】:

    • 为什么用这个函数不能正确转换数字1253343?
    【解决方案2】:

    有点改变但仍然优雅:

    var t = (function f(n, s) {
        return n === 0 ? s || "0" : f(~~(n / 2), (n % 2) + s);
    })(7, "");  // "111"
    

    【讨论】:

    • @RoyiNamir 如果省略括号n % 2 + s 会更优雅:)
    • @RoyiNamir 这是shortcutMath.floor
    【解决方案3】:

    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));

    【讨论】:

      【解决方案4】:

      您需要传递一个参数,该参数表示您是否已经生成了1。虽然该参数是 false,但您不会为 0 生成任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        • 2022-11-14
        • 1970-01-01
        • 2019-05-06
        • 1970-01-01
        • 1970-01-01
        • 2017-01-26
        相关资源
        最近更新 更多