Приведенная ниже рекурсивная формула должна помочь (даже если вы, вероятно, должны пересмотреть операции, поскольку я не получаю их из поставленных вами скобок):
private static double sumUpToN(double amount, int n) {
double result = amount;
for (int j = 1; j <= n; j++) {
result += (amount - amount/36*j);
}
return n > 0 ? result + sumUpToN(amount, n-1) : result;
}
Вы называете свою формулу следующим образом:
double test = sumUpToN(100, 3);
Случится так:
Начинается с n == 3
Он вычисляет result = 100 + (100-100/36*1) + (100-100/36*2) + (100-100/36*3) = 383.33333333333337
Затем он принимает это значение ион добавляет его к:
Идет к n == 2
Он вычисляет result = 100 + (100-100/36*1) + (100-100/36*2) = 291.6666666666667
Затем он принимает это значение и добавляет к:
Идет к n == 1
Он вычисляет result = 100 + (100-100/36*1) = 197.22222222222223
Затем он принимает это значение и добавляет его к:
Переходит к n == 0
Он просто возвращает 100
.Если вы не хотите, чтобы этот последний шаг выполнялся, измените условие return
с n > 0
на n > 1
.
Возвращаемый результат
Сумма всех этих (972.2222222222223
) должен составить формулу, которую вы ищете.