簡體   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