JavaScript中的十进制到二进制递归函数
我想用js编写一个递归函数来计算十进制数的二进制表示 我确实通过以下方式解决了这个问题: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 (请不要使用
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这是一个forMath.floor
@RoyiNamir如果我们省略括号,它可能会更加优雅。n%2+s
:)@RoyiNamir这是一个forMath.floor
。为什么数字1253343没有用这个函数正确转换?为什么数字1253343不能通过此功能正确转换?