2016-03-22 4 views
0

Я хочу рекурсивно вызвать payDay (день), который вернет кумулятивную сумму, сделанную с 1-го дня, на день ввода, если 1 пенни удваивается каждый день, начиная с 1-го дня. Я получил способ вернуть сумму, введенную день стоит, но я не могу понять, как сложить все предыдущие дни этого:Cummulative Recursion

public static double payDay(int day) { 
    if (day == 1) { 
     return 0.01; 
    } else { 
     return 2 * payDay(--day); 
    } 
} 
+0

Это кажется решаемым в простом умножении. – TheNorthWes

+2

Я предполагаю, что проблема должна быть решена с помощью рекурсии, @AdmiralAdama. – DavidS

+0

Почему не просто 'return 0.01 * 2 (day-1)'? – Michael

ответ

2

Ваш путь вы используете рекурсию, чтобы найти количество пенсов в день n. Чтобы рекурсивно найти общее (сумма всех дней), вы можете использовать формулу для расчета, что оплачивается в день n и добавить день n-1 в рекурсивной части:

Используйте формулу: 2^(n-1) за день n и рекурсию на этом :

package test; 

public class Main { 
    public static double payDay(int day) { 
     if (day == 1) { 
      return 1; 
     } 

     return Math.pow(2, day - 1) + payDay(day - 1); 
    } 

    public static void main(String[] a) { 
     for (int i = 1; i < 10; i++) { 
      System.out.println("Day " + i + " " + payDay(i) + " pennies"); 
     } 
    } 
} 
+0

Я бы скорректировал 2^n - 1 (например, 2^(n-1)) для ясности. Но +1 за хороший ответ :) –

+0

@TomRees - Точка взята, спасибо! – mikeb

0

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

double payDay(int day) { 
    return 0.01 * (Math.pow(2.0, day) - 1.0); 
} 

день = 1 возвращает 0,01

дня = 2 возвращает 0,01 + 0,02

день = 3 возвращает 0,02 + 0,01 + 0,04

+0

Это, вероятно, домашнее задание, поэтому рекурсия - это точка, я бы предположил, что – mikeb

+0

Возможно, вы правы, но это вариант, который стоит отметить, я думаю. – bm1729