我不知道如何递归地计算一项投资的回报率,其中本金是未知的,只有利率和利率的持续时间是已知的。
例如,如果我有一项投资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;
}