2013-09-26 2 views
0

У меня проблема с рекурсией.смесь рекурсивной и петлевой

Напишите программу, которая будет прогнозировать размер популяции организмов. Программа должна запрашивать начальное количество организмов, их среднесуточное увеличение населения (в процентах) и количество дней, в которые они будут умножаться. Например, население может начинаться с двух организмов, средний дневной прирост составляет 50 процентов, и им будет разрешено размножаться в течение семи дней. Программа должна использовать цикл для отображения размера населения за каждый день. Подтверждение ввода:

  • Не принимайте число менее 2 для начального размера населения.
  • Не принимайте отрицательное число для среднего ежедневного прироста населения.
  • Не принимайте число меньше 1 за количество дней, которое они будут умножать.
  • Убедитесь, что ваша программа использует рекурсивный метод вместо цикла для вычисления количества организмов.
  • В начале любого метода, который вы завершаете, представьте и отправьте условия. Если ни один из них не существует, укажите для каждого из них значение none.

Мы должны написать метод displayPopulation, который будет отображать размер популяции каждого дня. Затем мы должны написать рекурсивный метод для вычисления размера, а затем у нас есть основная для проверки ввода.

Теперь у меня есть основной и рекурсивный метод. То, что я не могу понять, - как заставить цикл отображать размер каждый день? Ниже мой рекурсивный метод:

private static double showPopulation(int dayNum, int days, double organisms, double dailyIncrease){ 

    if(dayNum==days) 
     return organisms; 
    else 

     return showPopulation(dayNum+1, days, organisms + organisms*(dailyIncrease/100), dailyIncrease); 
} 

Я знаю, что это даст мне размер всех дней вместе взятых. Я не знаю, как сохранить каждое значение и заставить его печатать в цикле другим методом. Я действительно потерян. Мне нужна помощь, я был бы признателен.

+1

Вы пробовали что-нибудь для displayPopulation? Если нет, как бы вы решили это в устной форме? Это иногда помогает мне определить рабочий алгоритм. – Meesh

+0

'@Rabia Khan' Если вы нашли какие-нибудь Ans. Помогите полностью, чем вы можете отметить это как принятое. – HybrisFreelance

ответ

0
private static double showPopulation(int dayNum, int days, double organisms, double dailyIncrease){   
    if(dayNum==days) 
     return organisms; 
    else{ 
     //put your print statement here population in `days` is `organisms` 
     return showPopulation(dayNum+1, days, organisms + organisms*(dailyIncrease/100),   dailyIncrease); 
    } 

} 
-1

Ваша текущая программа возвращает организмы в определенный день. Если вы хотите организмы от 1 до п-й день, то вы можете использовать цикл, как показано ниже:

double[] organismsArr = new double[days]; 
for(int i=1;i<=days;i++) 
organisms[i-1] = showPopulation(i, days, organisms + organisms*(dailyIncrease/100), dailyIncrease); 
1

написать метод внутри любого для или во время цикла и вызывать этот метод передачи значения ожидаемого методом. и распечатать результат.

Примечание. Я не пишу код, как это должно быть сделано вами. Сначала вы пытаетесь написать код, а затем, если у вас есть какой-либо вывод, тогда мы сможем проверить ваш код и попытаемся его исправить.

0
private static double showPopulation(int dayNum, int days, double organisms, double dailyIncrease) 
{ 
    if(dayNum==days) 
      return organisms; 
     else 
    { 
     System.out.println("Population for day"+(dayNum+1)+" is "+(organisms+organisms*(dailyIncrease/100))); 
     return showPopulation(dayNum+1, days, organisms + organisms*(dailyIncrease/100), dailyIncrease); 
    } 

    } 
} 
0
private static double PrintPopulation(int numDays, int days, 
     double organism, double increase) { 
    if (numDays == days) 
     return organism; 
    else { 
     double recentPopulation = organism + (organism * increase/100); 
     System.out.println("Population for day:" + numDays + " is: " 
       + recentPopulation); 
     return PrintPopulation(numDays + 1, days, recentPopulation, 
       increase); 
    } 

} 

Это должно решить проблему. дней - общее количество дней

Смежные вопросы