Преобразование десятичного числа в двоичное с использованием рекурсии в R - PullRequest
1 голос
/ 05 апреля 2019

Эта функция работает безупречно, но она настолько запутанная, может кто-нибудь объяснить мне этот код, как он работает? Я понимаю концепцию рекурсии, но часть cat (n %% 2) не имеет смысла для меня Почему-то я тоже не могу сохранить результат.

convert_to_binary <- function(n) {
if(n > 1) {
convert_to_binary(as.integer(n/2))
}
cat(n %% 2)
}

1 Ответ

0 голосов
/ 05 апреля 2019

Вот ответ из двух частей на ваш вопрос из двух частей.

Во-первых, как работает функция?

Позволяет использовать пример. Рассмотрим convert_to_binary(9).

Шаг 1 : функция проверяет, является ли n=9 больше единицы. Это так, и поэтому функция сама выполняет в целочисленной части 9/2, а именно 4.

Шаг 2 : Функция проверяет, является ли n=4 больше единицы. Это так, и поэтому функция выполняет сама в целочисленной части 4/2, а именно 2.

Шаг 3 : Функция проверяет, является ли n=2 больше единицы. Это так, и поэтому функция выполняет сама в целочисленной части 2/2, а именно 1.

Шаг 4 : функция проверяет, является ли n=1 больше единицы. Это , а не , поэтому функция выполняет свой последний шаг (часть cat(n %% 2)) с помощью n=1.

Шаг 5 : n %% 2 - это R для n (мод 2), и так как 1 (мод 2) равно 1, cat собирает 1 для окончательного вывода.

Шаг 6 Теперь, когда convert_to_binary(1) закончен, мы переходим к конечной фазе convert_to_binary(2). Таким образом, поскольку 2 (mod 2) равно 0, cat собирает 0 для окончательного вывода, давая нам 10 для нашего окончательного вывода (который все еще строится).

Шаг 7 Теперь, когда convert_to_binary(2) закончен, мы переходим к конечной фазе convert_to_binary(4). Таким образом, поскольку 4 (mod 2) равно 0, cat собирает 0 для окончательного вывода, давая нам 100 для нашего окончательного вывода (который все еще строится).

Шаг 8 Теперь, когда convert_to_binary(4) закончен, мы переходим к конечной фазе convert_to_binary(9). Таким образом, поскольку 9 (mod 2) равно 1, cat собирает 1 для конечного результата, давая нам 1001 для нашего конечного результата. Поскольку cat теперь завершил сбор выходных данных, он печатается на вашей консоли

cat не возвращает значение, поэтому вы не можете сохранить ни одно из этих значений. Это приводит нас ко второй части ответа.

Во-вторых, как мы можем сохранить значение?

Это модифицированная форма вашей функции, использующая точно такой же процесс. Однако эта функция фактически возвращает двоичную форму входного целого числа. Надеюсь, это помогло!

convert_to_binary <- function(n) {
  bin <- ''
  if(n > 1) {
    bin <- convert_to_binary(as.integer(n/2))
  }
  bin <- paste0(bin, n %% 2)
  return(as.numeric(bin))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...