我有一个项目,必须计算复利。给定用户输入的时间段,我必须占用该时间段并将其从一个时间段减去直到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直到等于零?
答案 0 :(得分:2)
您没有将所需的变量传递给兴趣函数。为了递归计算复利, [1] ,您将需要传递:
principal
(您的initialDeposit
)是deposit
(您的regularDeposit
)已添加;之前rate
(您的percent
)除以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
类型,以避免因无法表示浮点数相等性比较而固有的问题精确地确定所有值-对于所有涉及货币的现实世界财务代码实现,应避免由于该原因和所使用的确切类型而进行浮点计算)
脚注: