繁体   English   中英

rand()在递归函数中产生超出设置范围的数字

[英]rand() produces numbers above set range in recursive function

我的理解是,这将产生一个介于10和offset之间的随机数:

random = (rand() % 10) + offset;

偏移量增加了1,但从未超过10,但是当我运行此代码时,变量random被设置为数字> 10。

有问题的代码:

#include "pch.h"
#include <cstdlib>
#include <Windows.h>
#include <iostream>
using namespace std;

void gen(int offset)
{
    int random;

    if (offset != 10)
    {
        random = (rand() % 10) + offset;
        cout << "random should be between: " << 10 << " and " << offset << endl;
        cout << "random: " << random << endl << endl;
        Sleep(500);
        gen(++offset);
    }
}

int main()
{
    srand(373);

    gen(1);
    cin.get();
}

和输出:

随机值应介于10和1之间

随机:7

随机值应介于10和2之间

随机:11

随机值应介于10到3之间

随机:3

随机值应介于10到4之间

随机:13

随机值应介于10到5之间

随机:10

随机值应介于10到6之间

随机:13

随机值应介于10到7之间

随机:16

随机值应介于10到8之间

随机:14

随机值应介于10到9之间

随机:18

(rand() % 10)返回范围[ (rand() % 10) + offset ]的值,因此(rand() % 10) + offset将返回范围[offset,offset + 9]的值。

如果要返回范围[offset,10]内的值,则需要(rand() % (11 - offset)) + offset小于10的(rand() % (11 - offset)) + offset的偏移量。

另外,您可能应该使用std :: uniform_int_distribution获取范围内的随机整数。

(rand() % 10)得出0到9之间的数字,然后向其添加offset 。第一次rand() % 10)得出6,向其加上1。因此为7 第二次, rand() % 10)得到9,您加上了2,即11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM