使用R中的递归将十进制转换为二进制

时间:2019-04-05 16:44:04

标签: r

此功能可以正常工作,但令人困惑,有人可以向我解释此代码,它如何工作?我了解递归的概念,但是cat(n %% 2)部分对我来说没有意义 不知何故,我也无法保存结果。

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

1 个答案:

答案 0 :(得分:0)

这是您的两部分问题的两部分答案。

首先,该功能如何工作?

让我们举个例子。考虑convert_to_binary(9).

步骤1 :该函数检查n=9是否大于1。是的,因此该函数对9/2的整数部分4执行本身

步骤2 :该函数检查n=4是否大于1。是的,因此该函数对4/2的整数部分2执行本身

第3步:该函数检查n=2是否大于1。是的,因此该函数对2/2的整数部分1执行本身

步骤4 :该函数检查n=1是否大于1。它不是 ,因此该函数使用cat(n %% 2)执行其最后一步(n=1部分)。

第5步:对于n(模2),n %% 2是R,因此,由于1(模2)是1,cat收集1进行最终输出。

步骤6 现在,由于convert_to_binary(1)已完成,因此我们进入convert_to_binary(2)的结束阶段。因此,由于2(模2)为0,cat收集0作为最终输出,从而使我们10得到我们的最终输出(仍在构建中)。

第7步现在,由于convert_to_binary(2)已完成,因此我们进入convert_to_binary(4)的结束阶段。因此,由于4(模2)为0,cat收集0作为最终输出,从而使我们100得到我们的最终输出(仍在构建中)。

步骤8 现在,由于convert_to_binary(4)已完成,因此我们进入convert_to_binary(9)的结束阶段。因此,由于9(模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))
}