遞歸地計算最簡單的是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