C 复利递归函数

标签 c

我有一个项目,我必须计算复利。给定用户输入的周期,我必须获取该周期并将其从 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 类型,以避免浮点相等比较中由于无法准确地表示所有值 - 对于所有处理金钱的现实世界金融代码实现,应避免浮点计算,并使用确切的类型)

脚注:

  1. 避免使用递归函数,只要简单的过程循环就足够了。每个递归调用都是一个单独的函数调用,需要单独的函数堆栈。虽然在某些阶乘和排列中,递归解决方案更加优雅,但这些只是异常(exception),而不是规则。

关于C 复利递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53216170/

相关文章:

c++ - C和C++中枚举的用途是什么

c - 如何将 gcc 运行时错误打印到文本文件?

没有 stdio 的 C,有什么可能?

close() 与 shutdown() 和 receive()

objective-c - 不同的 C 数组声明

c++ - memcmp 为相同(零值)位字段结构返回非零

c - 使用 libavcodec 保存 H.264 编码图像

c - 为什么字符串不相等?

c - 返回结构数组或结构指针数组?

c - 如何在没有 printf 的情况下打印指针地址