每次循环传递的条件呈指数级降低

condition exponentially less likely per loop pass

我想在 for 循环中实现一个条件,在每次循环通过后,该条件为真的可能性会呈指数级降低。

这是我当前的线性解决方案的简化版本:每个循环通过它时,随机数 === 0 的可能性降低 x+1,因此每个 运行 的概率降低。

for (let x = 0; x < 10; x++) {
    if (getRandomInt(0,x) === 0) {
        // do something
    }   
}

function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

但我不知道如何更改条件,使每次循环通过的概率呈指数增长,而不是像我的解决方案中那样线性变小。

有人知道吗?感谢您的宝贵时间!

如果我明白你在找什么,你就不能跟着做吗?

for (let x = 0; x < 10; x++) {
    if (getRandomInt(0,Math.pow(2, x)) === 0) {
        // do something
    }   
}

不是通过加法来增加 x,而是通过乘法来增加它。

for (let x = 1; x < 128; x *= 2) {
    if (getRandomInt(0, x) == 0) {
        // do something
    }
}