Вот ответ из двух частей на ваш вопрос из двух частей.
Во-первых, как работает функция?
Позволяет использовать пример. Рассмотрим 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))
}