复利的C递归函数

时间:2018-11-08 21:09:29

标签: c

我有一个项目,必须计算复利。给定用户输入的时间段,我必须占用该时间段并将其从一个时间段减去直到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直到等于零?

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类型,以避免因无法表示浮点数相等性比较而固有的问题精确地确定所有值-对于所有涉及货币的现实世界财务代码实现,应避免由于该原因和所使用的确切类型而进行浮点计算)

脚注:

  1. 避免在简单的过程循环就足够的地方使用递归函数。每个递归调用都是一个单独的函数调用,需要一个单独的函数堆栈。尽管在某些阶乘和置换中,递归解决方案更为优雅,但这些只是例外,而不是规则。