为何这段R代码执行binary(6)返回1 1 0,而非3 0等预期结果?
R递归二进制转换函数输出解释
你给出的代码如下:
binary <- function(x) { if(x == 0) numeric() else c(Recall(x %/% 2), x %% 2) } binary(6)
我们可以逐层拆解binary(6)的执行逻辑:
- 第一层调用
binary(6):x≠0,执行c(Recall(6%/%2), 6%%2),先计算Recall(3),再把余数0拼在结果末尾 - 第二层调用
binary(3):x≠0,执行c(Recall(3%/%2), 3%%2),先计算Recall(1),再把余数1拼在结果末尾 - 第三层调用
binary(1):x≠0,执行c(Recall(1%/%2), 1%%2),先计算Recall(0),再把余数1拼在结果末尾 - 最内层调用
binary(0):触发终止条件,返回空数值向量numeric()
接下来从最内层往外拼接返回结果:
binary(1)的返回值 =c(空向量, 1)→ 结果为1binary(3)的返回值 =c(binary(1)的结果, 1)→ 结果为c(1, 1)binary(6)的返回值 =c(binary(3)的结果, 0)→ 最终结果为c(1, 1, 0)
你疑惑的两个1,分别是x=1和x=3时计算得到的余数,按递归调用的返回顺序拼接到了最终结果的前两位,正好对应十进制6的二进制表示110。
内容的提问来源于stack exchange,提问作者user16461886
相关产品推荐
相关产品推荐

