兩個(gè)C函數(shù)
rand()函數(shù)生成的隨機(jī)數(shù)是偽隨機(jī)數(shù),所謂偽隨機(jī)數(shù)蔬蕊,指的是程序每次運(yùn)行,生成的隨機(jī)數(shù)都是不變的哥谷,生成隨機(jī)數(shù)的原理是根據(jù)一個(gè)種子袁串,用某個(gè)遞推公式推算出一系列數(shù)概而,而種子值是計(jì)算機(jī)開啟后固定的,除非重置了計(jì)算機(jī)囱修。
rand()返回一隨機(jī)數(shù)赎瑰,范圍在0~RAND_MAX之間,RAND_MAX在stdlib.h定義破镰,這個(gè)值會根據(jù)環(huán)境變化餐曼。一般在調(diào)用rand()前,會使用srand()來設(shè)置隨機(jī)數(shù)種子讓rand()每次生成的隨機(jī)數(shù)變化鲜漩,如果沒有設(shè)置源譬,則默認(rèn)使用1。
一般用法:
1.使用srand()提供一個(gè)種子孕似,參數(shù)是一個(gè)unsigned int踩娘,一般可以用時(shí)間作為參數(shù),如srand(time(NULL))
,因?yàn)槌绦蜻\(yùn)行時(shí)間不同喉祭。
2.調(diào)用rand(),根據(jù)上面提供的種子返回一個(gè)隨機(jī)數(shù)(范圍在0~RAND_MAX)养渴;
3.多次調(diào)用rand(),獲取隨機(jī)數(shù)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int* arrayWithRandom(int length) {
srand((unsigned int)time(NULL));//time(NULL)返回當(dāng)前時(shí)間距離1970年1月1日的時(shí)間間隔,單位秒數(shù)
int *array = (int *)malloc(sizeof(int) * length);
for (int i = 0; i < length; i++) {
array[i] = rand()%100;
}
return array;
}
int main(int argc, const char * argv[]) {
int *array = arrayWithRandom(10);
for (int i = 0; i < 10; i++) {
printf("%d ",array[i]);
}
return 0;
}
遞歸求解調(diào)用過程