由于这是家庭作业,我想为您提供一些关于#2 和#3 的指导。
对于#2,创建一个循环,不断抛硬币并计算连续出现正面的数量。每次抛掷时,抛掷次数加 1,当达到要求的正面数时,只需返回抛掷次数。
为了帮助您开始,这将执行 nbTosses tossesL
coin <- c('h','t')
ComputeNbTosses <- function(targetTosses) {
nbtosses = 0;
while (nbtosses < targetTosses) {
nbtosses = nbtosses + 1
}
return(nbtosses);
}
您只需修改它以接受参数 targetHeads 并仅在到达 tagetHeads 时退出 while 循环。
对于 #3,将 #2 放入函数中,然后使用set.seed(integer)
,设置种子。计算机上的随机数并不是真正随机的。大多数随机生成器允许您设置种子。如果使用相同的种子,您将获得两次相同的伪随机数序列,这允许调试。
编辑:我将#2从递归更改为普通循环,为他编写代码会更容易。
编辑(提示):
这将计算您连续有多少个正面,现在您必须在达到正面目标值时停止循环:
coin <- c('h','t')
ComputeNbTosses <- function(targetTosses) {
nbTosses = 0;
nbHeadsInRow = 0;
allTosses = c();
while (nbTosses < targetTosses) {
toss = sample(coin,1,T)
allTosses = c(allTosses, toss);
if (toss == 'h') {
nbHeadsInRow = nbHeadsInRow + 1;
} else {
nbHeadsInRow = 0;
}
nbTosses = nbTosses + 1
}
ret = list();
ret$nbTosses = nbTosses;
ret$nbHeadsInRowAtEnd = nbHeadsInRow;
ret$allTosses = allTosses;
return(ret);
}
ComputeNbTosses(5);
ComputeNbTosses(8);
这将打印当它到达 nbTosses 时,您在行中有多少个头。这不是你想要的。你想要的是:
- 将参数从
targetTosses
to targetHeadsInRow
- 改变条件中的
while
以便它停止时nbHeadsInRow
达到targetHeadsInRow
.
- 你需要返回的是
nbTosses
(达到你的条件的抛掷次数)
如果有任何不清楚的地方请告诉我。