我有一个项目,我必须计算复利。给定用户输入的周期,我必须获取该周期并将其从 1 中减去,直到 period = 0
。
double interest(double initialDeposit, double regularDeposit, double percent, int period, double total) {
total = ((1 + percent) * (period)) + regularDeposit;
if (period > 0){
return period - 1;
}
else {
return total;
}
}
这是编写周期递减一直到为零的递归函数的正确方法吗?
最佳答案
您没有将所需的变量传递给您的兴趣函数。为了递归计算复利[1],您需要传递:
本金
(您的initialDeposit
),这是本金的基本金额存款
(您的常规存款
)已添加;之前- 乘以利率
利率
(您的百分比
)除以 - 年度复利期数
cmpperiod
;全部完成 - 总周期数
nperiods
这可以通过以下方式递归实现:
double interest (double principal, double deposit, double rate,
int cmpperiod, int nperiods)
{
principal += deposit;
principal += principal * rate / (double) cmpperiod;
nperiods -= 1;
if (nperiods == 0)
return principal;
else
return interest (principal, deposit, rate, cmpperiod, nperiods);
}
(注意:年复利期数和总期数已更改为 int
类型,以避免浮点相等比较中由于无法准确地表示所有值 - 对于所有处理金钱的现实世界金融代码实现,应避免浮点计算,并使用确切的类型)
脚注:
- 避免使用递归函数,只要简单的过程循环就足够了。每个递归调用都是一个单独的函数调用,需要单独的函数堆栈。虽然在某些阶乘和排列中,递归解决方案更加优雅,但这些只是异常(exception),而不是规则。
关于C 复利递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53216170/