Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的十进制到二进制递归函数_Javascript_Recursion_Binary - Fatal编程技术网

JavaScript中的十进制到二进制递归函数

JavaScript中的十进制到二进制递归函数,javascript,recursion,binary,Javascript,Recursion,Binary,我想用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); 小提琴: 然而,我无法摆脱前导零 因此,如果我用7执行IIFE,它会产生:0111,我想要111 我怎样才能摆脱领先的0 (请不要使用

我想用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);
小提琴:

然而,我无法摆脱前导零

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

我怎样才能摆脱领先的
0


(请不要使用字符串替换解决方案。我想让它尽可能优雅。我知道我可以做
警报(数字(234)。toString(2))
,但这个问题被标记为递归。)

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

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

生成任何内容,只是稍微更改了一下,但仍然很优雅:

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

稍有变化,但仍然优雅:

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

这是一个干净的,我从这里搬来的

const decToBi=num=>num==0?0:num%2+10*decToBi(数学楼层(num/2));

控制台日志(decToBi(10))//1010
这是一个干净的我从

const decToBi=num=>num==0?0:num%2+10*decToBi(数学楼层(num/2));
控制台日志(decToBi(10))//1010
函数base10ToString(num,str=”“){
如果(num==0){
返回str;
}
如果(num%2==0)str=“0”+str;
else str=“1”+str;
返回base10ToString(数学层(num/2),str);
}
console.log(base10ToString(7))
函数base10ToString(num,str=”“){
如果(num==0){
返回str;
}
如果(num%2==0)str=“0”+str;
else str=“1”+str;
返回base10ToString(数学层(num/2),str);
}

console.log(base10ToString(7))
@RoyiNamir如果我们省略括号,它可能会更加优雅。@RoyiNamir这是一个for
Math.floor
@RoyiNamir如果我们省略括号,它可能会更加优雅。
n%2+s
:)@RoyiNamir这是一个for
Math.floor
。为什么数字1253343没有用这个函数正确转换?为什么数字1253343不能通过此功能正确转换?