我不知道如何递归地计算一项投资的回报率,其中本金是未知的,只有利率和利率的持续时间是已知的。
例如,如果我有一项投资2年,回报率为10%(或0.1%),那么回报率将等于0.21(或21%)。这是非递归计算的,

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

因为我可能不想只知道最后的计算结果,而想知道投资的间歇年份,所以我必须递归地这样做(例如,如果持续时间是5年,我想知道第一年、第二年之后的回报率是多少,等等)。
因为这是一个算法,所以不需要C,但这就是我要用它编程的地方。

最佳答案

最容易递归计算的是1.0+ror:

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

如果rate=0.1,periods=2,则返回1.21;如果rate=0.1,periods=3,则返回1.331。然后可以减去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表示rate=0.1,periods=2,0.331表示rate=0.1,periods=3。
实际上,我们只需依赖Math.Pow()函数:
double calculateRateOfReturn(double rate, int periods) {
  return Math.Pow(1.0+rate, periods) - 1.0;
}

10-05 21:09