Рекурсивная норма доходности (RoR) - PullRequest
1 голос
/ 02 ноября 2011

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

Например, если бы у меня были инвестиции в течение 2 лет под 10% (или 0,1), RoR был бы равен 0,21 (или 21%). Это рассчитывается не рекурсивно как

0.21 = 2 * 0.1 + (0.1 ^ 2)
// or
ror = duration * rate + (rate ^ duration)

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

Поскольку это алгоритм, C # не требуется, но я буду его программировать.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2011

Рекурсивно вычислить проще всего: 1,0 + RoR:

double calculateRateOfReturnPlus1(double rate, int periods) {
  if (periods == 0)
    return 1.0;
  return (1.0 + rate) * calculateRateOfReturnPlus1(rate, periods - 1);
}

Возвращает 1,21 для коэффициента = 0,1, периодов = 2 и 1,313 для коэффициента = 0,1, периодов = 3.Затем вы можете вычесть 1,0, чтобы получить чистый RoR.Кроме того, вы можете вычислить RoR непосредственно следующим образом:

double calculateRateOfReturn(double rate, int periods) {
  if (periods == 0)
    return 0.0;
  return (1.0 + rate) * (calculateRateOfReturn(rate, periods - 1) + 1.0) - 1.0;
}

Кроме того, вы можете вычислить RoR итеративно следующим образом:

double calculateRateOfReturn(double rate, int periods) {
  double RoR = 1.0;
  for (int i = 0; i < periods; i++) {
    RoR = RoR * (1.0 + rate);
  }
  return RoR - 1.0;
}

Последние две функции возвращают 0,21 для скорости = 0,1, периодов= 2 и 0,331 для ставки = 0,1, периоды = 3.

На практике можно просто полагаться на функцию Math.Pow():

double calculateRateOfReturn(double rate, int periods) {
  return Math.Pow(1.0+rate, periods) - 1.0;
}
1 голос
/ 02 ноября 2011

Версия LINQ:

double rate = 0.1;
int totalYears = 5;

var results = Enumerable.Range(1, totalYears).Select(i => new { Year = i, RoR = Math.Pow(1 + rate, i) - 1 });

Это дает вам доходность за каждый год в течение периода.

0 голосов
/ 02 ноября 2011

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

Если вы все еще хотите использовать рекурсию для расчета годового (или любого другого периода), вы можете ввести результат расчета (начиная с 1) в качестве основного для следующего периода.

Таким образом, период "0" будет1, то период 1 будет равен 1,1, период 2 будет равен 1,21 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...