Ваша рекурсия за день n старается использовать 70% результата дня n + 1.Это вызывает бесконечную рекурсию.Вы должны использовать 70% первого дня, и это будет работать.Сейчас это не 70% предыдущего дня, а на 70% больше, поэтому не * 0,7
, а * 1,7
.
И нужно учитывать, что не может быть отрицательного числа зараженных компьютеров.
Наконец, вы переоцениваете ремонт: в 1-й день это 2, во 2-й день это 4, но, поскольку 2-й день 1 уже был учтен в вашей рекурсии на 1-й день, вы выводите их дважды.Таким образом, вы должны считать только дополнительные компьютеры с фиксированным днем n.Итак, Pow (2, n-1).
Исправленный код будет выглядеть следующим образом:
int computervirus(int n){ //n:Tage
int nr_virus= 100;
int nr_fixed = 0;
int rest = 0;
if(n>0){
nr_virus = computervirus(n-1)*1.7; // n-1 not n+1
if (n==1)
nr_fixed = 2;
else nr_fixed = pow(2,n-1);
}
rest = nr_virus - nr_fixed;
if (rest<0)
rest = 0;
return rest;
}
Демонстрационная версия