php - 返回随机数但不是 2

标签 php recursion random

<分区>

为什么有时会返回 2?

function pickServer(){
    $varr = rand(1,4);
    if($varr==2){
        pickServer();
    }
    return $varr;
}

最佳答案

正如其他人所指出的,您的问题的答案是您的代码失败而没有返回。如果在第一次尝试第二次尝试时调用 rand() 返回 2(发生这种情况的几率为 1/16),您将得到2 结果。

但是您解决问题的方法可能会更好。

对于这个问题,递归和循环都是愚蠢的。这是一个映射问题,而不是一个随机性问题。 (它类似于一些常见的随机编码面试问题,可以在拒绝循环中最容易地处理,但它确实不是该类的问题。)

您想要三种结果中的一种,而不是四种。 (1、3 和 4。)这意味着您应该生成三个随机数的范围,而不是四个。您可以使用数组重新映射或使用 if。两种可能性如下所示。如果我的语法有误,请告诉我——今天早上我的 PHPfu 很弱。

/* array remapping */
function pickServer() {
    $remap = array(1, 3, 4);
    return $remap[rand(1,3)];
}

/* if remapping */
function pickServer() {
    $server = rand(1,3);
    if ($server==2) {
        $server=4;
    }
    return $server;
}

我之前没有注意到,但 balpha 预料到了我的回答。他在第二个示例中使用 if 重新映射。他没有将 2 重新映射为 4,而是将 1 添加到高于 1 的任何答案,这是一个等价的解决方案。

关于php - 返回随机数但不是 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300797/

相关文章:

php - Woocommerce WC_Cart->fees 和 WC_Cart::get_checkout_url 已弃用

php - 在本地主机上开发带有 SSL 的网站时需要考虑什么

c - 二叉树的后序/预序遍历

c++ - 在 C++ 中使用递归构建字符串

javascript - 从表格单元格更新数据库而不刷新页面

php - 需要丢弃具有空值的数组

algorithm - 如何在 Scheme 中查找列表的分区

c++ - 如何从文件夹树中快速选择一个随机文件?

java - (随机选择)文件中的名称

java - 从集合中选择随机子集的最佳方法?