Как сделать этот алгоритм с рекурсией вместо фактического, который использует цикл
Задача алгоритма состоит в том, чтобы рассчитать распространение заболевания в нормальной популяции, начиная с 1 больного человека.
Теперь алгоритм, который я сделал, работает с 2 для циклов.
Первый вопрос: не могли бы вы найти советы для фактического кода?
Второй вопрос: как я могу сделать это с помощью рекурсии функции epidemy?
Что я уже пробовал:
Фактическая работа кода:
// Epidemology of a disease #include <stdio.h> #include <time.h> #include <stdlib.h> int read_input(); int epidemy(int sick_people, int time_past, int sane_people); int main(){ int sick_people = 1; int time_past; int sane_people; srand(time(NULL)); time_past = read_input(); sane_people = read_input(); epidemy( sick_people , time_past, sane_people ); return 0; } int read_input(){ printf(" Write a positive integer.\n"); int val; while (scanf("%d", &val) != 1 || val < 0){ scanf("%*[^\n]%*c"); printf("Input incorrect. Write a positive integer.\n"); } printf("The input was %d\n", val); return val; } // this function is going to produce a random number between 0 and 1 , then i will compare with the probability of being sick // if x randomly generated is minor than p , sick people will increase and sane people will decrease by 1 // then i stamp sick people when t matches the time that i asked in input in my main function // probability is also a variable depending from sane people at each time int epidemy(int sick_people, int time_past ,int sane_people){ int t = 0; int i = 0; float p = 0.001; sane_people= sane_people- sick_people; for(t = 0 ;t <time_past; t++){ for(i = 0 ; i <= sane_people ; i++){ float x = rand() / (float) RAND_MAX; if(x <= p){ sick_people=sick_people+1; sane_people= sane_people-1; } if(sane_people<=0){ // people infected at time t printf("Sick people at time %d are %d\n", t , sick_people); exit(0); } } p = p * sick_people; if(sane_people<=0){ // people infected at time t printf("Sick people at time %d are %d\n", t , sick_people); exit(0); } } printf("Sick people at time %d are %d\n", t , sick_people); }
CPallini
"Второй вопрос: как я могу сделать это с рекурсией функции epidemy?"
Разве это достойно? Я имею в виду, что итерация выглядит просто естественным способом справиться с таким сценарием.