我不知道如何递归计算投资返回率,其中本金是未知的,只有利率和利率的持续时间是已知的。
例如,如果我以 10%(或 0.1)的 yield 投资 2 年,则返回率将等于 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;
}
最后两个函数在 rate=0.1、periods=2 时返回 0.21,在 rate=0.1、periods=3 时返回 0.331。
在实践中,我们可以简单地依赖于 Math.Pow()
函数:
double calculateRateOfReturn(double rate, int periods) {
return Math.Pow(1.0+rate, periods) - 1.0;
}
关于c# - 递归 yield (RoR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7974665/