这是使用递归函数模拟游戏的另一种有趣方式。
spin <- function(outcomes = 1:5, start = 0L, end = 50L)
if (start <= end)
c(got <- sample(outcomes, 1), Recall(outcomes, start + got, end))
spin()
# [1] 5 4 4 5 1 5 3 2 3 4 4 1 5 4 3
虽然很优雅,但它不会像sample
@Viktor 所建议的那样进行一次调用的@Simon 解决方案的改进版本那么快:
spin <- function(outcomes = 1:5, end = 50L) {
max.spins <- ceiling(end / min(outcomes))
x <- sample(outcomes, max.spins, replace = TRUE)
head(x, match(TRUE, cumsum(x) >= end))
}
spin()
# [1] 3 5 2 3 5 2 2 5 1 2 1 5 5 5 2 4
对于您的最终目标(找出一个人在整个游戏中处于领先地位的概率),是否while
会更有效率是值得商榷的:while 循环肯定会更慢,但您可能会受益于提前退出的可能性领先者从一名球员切换到另一名球员。这两种方法都值得测试。