You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段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()

接下来从最内层往外拼接返回结果:

  1. binary(1)的返回值 = c(空向量, 1) → 结果为1
  2. binary(3)的返回值 = c(binary(1)的结果, 1) → 结果为c(1, 1)
  3. binary(6)的返回值 = c(binary(3)的结果, 0) → 最终结果为c(1, 1, 0)

你疑惑的两个1,分别是x=1和x=3时计算得到的余数,按递归调用的返回顺序拼接到了最终结果的前两位,正好对应十进制6的二进制表示110。

内容的提问来源于stack exchange,提问作者user16461886

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:24:08