Я взял на себя смелость протестировать вашу функцию в Java (синтаксис аналогичен), и он дал странные результаты. Вот что я получил:
calculateInterest2(1000, .1, 0); // = 1000.0
calculateInterest2(1000, .1, 1); // = 1200.0
calculateInterest2(1000, .1, 2); // = 1420.0
calculateInterest2(1000, .1, 3); // = 1662.0
calculateInterest2(1000, .1, 4); // = 1928.2
Очевидно, это не правильно. Прежде всего, обратная строка также повторно применяет вычисление .... Вот переписывание метода:
static private double calculateInterest2(double start, double rate, int duration)
{
if (0 == duration) {
return start;
} else {
return (1+rate) * calculateInterest2(start, rate, duration - 1);
}
}
Как видите, этот метод проверяется с помощью следующих выводов:
calculateInterest2(1000, .1, 0); // = 1000.0
calculateInterest2(1000, .1, 1); // = 1100.0
calculateInterest2(1000, .1, 2); // = 1210.0
calculateInterest2(1000, .1, 3); // = 1331.0
calculateInterest2(1000, .1, 4); // = 1464.1000000000001
Звучит правее для меня.