R语言 编写概率递归函数

lb3vh1jj  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(162)

我试图找出概率在哪里达到某个点;则函数将返回负责该概率的值。
我写的函数有两个参数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。

velaa5lx

velaa5lx1#

您的思路是正确的。请尝试使用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

相关问题