首页 > 解决方案 > Trying to find the binary of 3 items in array. Getting infinite loop

问题描述

Here is what I did. Used For loop to iterate through all elements., then find binary by recursion and return

var temp3 = [57,80,95];
var temp2 = [];
var temp4 = '';
var r;

for(i=0;i<temp3.length;i++) {
var  r = temp3[i];    
temp2.push(binary(r));
}
function binary(r) {
    console.log(r);
  if (r === 0) return r;
  temp3 = (r % 2) + temp3;
  binary(Math.floor(r / 2));
  return temp3;
}
//1100010
console.log(temp2);

标签: javascriptrecursioninfinite-loop

解决方案


您可以使用按位运算符和递归轻松地将数字转换为binary-

const binary = x => 
  x < 2
    ? String(x)
    : binary(x >> 1) + String(x & 1)

console.log(binary(57)) // 111001
console.log(binary(58)) // 111010
console.log(binary(80)) // 1010000
console.log(binary(95)) // 1011111
console.log(binary(1234567)) // 100101101011010000111
console.log(binary(12345678)) // 101111000110000101001110

如果您希望结果是数字而不是字符串,我们也可以这样做。第二种技术有局限性,因为 JavaScript 的数字很快溢出 -

const binary = n => 
  n == 0
    ? 0 
    : 10 * binary (n >> 1) + (n & 1)

console.log(binary(57)) // 111001
console.log(binary(58)) // 111010
console.log(binary(80)) // 1010000
console.log(binary(95)) // 1011111
console.log(binary(1234567)) // 100101101011010000000    <- wrong
console.log(binary(12345678)) // 1.0111100011000008e+23  <- imprecise


推荐阅读