Попытка найти двоичный файл из 3 элементов в массиве. Получение бесконечного цикла

#javascript #recursion #infinite-loop

#javascript #рекурсия #бесконечный цикл

Вопрос:

Вот что я сделал. Используется для цикла для перебора всех элементов., затем найдите двоичный файл с помощью рекурсии и верните

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

Комментарии:

1. что binary делает?

2. Ваша функция изменяется temp3 с исходного массива на число. Кроме того, рекурсии нет. редактировать о, подождите, да, есть

Ответ №1:

Вы можете использовать побитовые операторы и рекурсию, чтобы легко преобразовать число в binary

 const binary = x => 
  x < 2
    ? String(x)
    : binary(x >> 1)   String(x amp; 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 amp; 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 

Комментарии:

1. Мило, как всегда. Я думаю, что второй вариант может быть проще, поскольку const binary = (n) => n == 0 ? 0 : 10 * binary (n >> 1) (n amp; 1)

2. я смотрел на это раньше и думал, что это слишком сложно. не мог этого видеть. спасибо Скотту: D

Ответ №2:

Правильный способ записи двоичной функции был бы следующим —

 function binary(r, i = 0) {
    console.log(r);
    if (r === 0) return r;
    return (r % 2) * Math.pow(10, i)   binary(Math.floor(r / 2), i   1);
}
 

Хотя существует много способов преобразовать int в двоичный файл, я считаю, что это один из самых простых. И, если вам нужны дополнительные пояснения или ясность, пожалуйста, прокомментируйте ниже.

Комментарии:

1. Привет, Сурадж, я на самом деле новичок. Итак, я не должен использовать какую-либо другую встроенную функцию. Я очень признателен, если вы можете помочь мне с дополнительной информацией. Спасибо!

2. @jithinsurendran на самом деле, эта функция использует концепцию аргументов по умолчанию, иначе вам нужно было бы вызвать двоичную функцию с двумя аргументами (например binary(r, 0) , и другое — Math.pow(10, i), который фактически возводит 10 в степень i . Таким образом, вы действительно можете удалить обе эти вещи, но вам нужно будет добавить дополнительный ненужный код.