此功能可以正常工作,但令人困惑,有人可以向我解释此代码,它如何工作?我了解递归的概念,但是cat(n %% 2)部分对我来说没有意义 不知何故,我也无法保存结果。
convert_to_binary <- function(n) {
if(n > 1) {
convert_to_binary(as.integer(n/2))
}
cat(n %% 2)
}
答案 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))
}