递归地计算最简单的是1.0 +回报率:
double calculateRateOfReturnPlus1(double rate, int periods) {
if (periods == 0)
return 1.0;
return (1.0 + rate) * calculateRateOfReturnPlus1(rate, periods - 1);
}
这将返回速率= 0.1时为1.21,周期= 2时为1.331,速率= 0.1时为1.331,周期= 3。然后,您可以减去1.0以获得纯粹的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;
}
此外,可以迭代地计算回报率是这样的:
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,2,3,...的RoR?无需递归。 – svick