r语言 - 写概率递归函数



我试图找到概率达到某一点的地方;然后,该函数将返回负责该概率的值。

我写的函数有两个参数p表示cpu个数q每个CPU处理的作业数

该函数希望优化服务器中的CPU数量,以保证每个CPU同时只处理一个任务的概率为0.9。因此,处理器的数量(p)需要为>作业数(q).

opcpu <- function(p,q){
if (p < q){
paste("The number of processors should be",q," or more")
} else {
prob = prod(p:(p-(q-1)))/p^q
while (prob < 0.9){
p = p + 1
opcpu(p,q)
}
return(p)
}
}

我把这个函数写成一个递归函数。但是好像有点不对劲。

我试图运行该函数,但它不工作。通过试错法求解,得到当q = 12时p = 631。

你做对了。尝试使用if而不是while,并返回p或递归调用:

opcpu <- function(p,q) {
if (p < q) {
stop("The number of processors should be", q, " or more")
}
prob <- prod(p:(p-(q-1)))/p^q
if (prob < 0.9) {
opcpu(p+1,q)
} else {
p
}
}
opcpu(12,12)
# 631

或者您可以使用while代替递归:

opcpu <- function(p,q) {
if (p < q) {
stop("The number of processors should be", q, " or more")
}
prob <- prod(p:(p-(q-1)))/p^q
while (prob < 0.9){
p <- p + 1
prob <- prod(p:(p-(q-1)))/p^q
}
p
}
opcpu(12,12)
# 631

注意,我将paste()更改为stop(),因为似乎你试图表明p < q不是有效的输入。另一种选择是,如果输入缺失或小于q:

,则在p = q处开始测试。
opcpu <- function(p,q) {
if (missing(p) || p < q) p <- q
prob <- prod(p:(p-(q-1)))/p^q
if (prob < 0.9) {
opcpu(p+1,q)
} else {
p
}
}
opcpu(q = 12)
# 631

最新更新