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

R语言计算20人排列中A、B相邻概率的代码问题排查

问题排查与修正

核心问题

你的f1()函数存在致命逻辑错误:无论循环中是否检测到1和2相邻,函数最后都会执行F并返回FALSE。循环里的TRUE只是在条件满足时执行了这个值,但没有提前终止函数并返回,循环结束后直接返回F,导致所有模拟结果都是FALSE,最终概率为0。

修正后的代码

f1 <- function() {
  x <- sample(1:20, 20, replace = FALSE)
  
  for (i in 1:19) {
    # 检测1和2相邻的两种情况
    if ((x[i] == 1 && x[i+1] == 2) || (x[i] == 2 && x[i+1] == 1)) {
      return(TRUE) # 找到后立即返回TRUE,终止函数
    }
  }
  
  return(FALSE) # 循环结束没找到,返回FALSE
}

prob_p <- function(Nrep) {
  rs <- replicate(Nrep, f1())
  sum(rs) / length(rs)
}

# 运行模拟
prob_p(100000)

关键修改点

  • 在条件满足时用return(TRUE)直接终止函数并返回结果,而不是只写TRUE
  • 循环结束后明确返回FALSE,逻辑更清晰

理论验证

20人排成一排,A(1)和B(2)相邻的理论概率是2/20 = 0.1,修正后的模拟结果会接近这个值,比如10万次模拟后结果应该在0.098到0.102之间浮动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:36:22