如何解决这个复利的家庭作业?

时间:2018-01-31 13:34:12

标签: java

我接到了一项任务:

  

写一个给定初始投资金额($)和利率和年数的递归方法,它计算n年末的金额。请注意,利息每年都是复利的。

     

使用以下方法签名

public static double invest(double amount, double rate, int year)
     

其中

     
      
  • 金额是投资金额
  •   
  • 利率是年利率
  •   
  • 年是投资年数
  •   
     

例如

     
      
  • invest(2000,0.07,1)返回2140
  •   
  • invest(5000,0.05,10)返回8144.47313(为简洁起见,省略了一些数字)
  •   
     

然后编写一个程序来测试你的方法。

这是我的节目

public class Investment {

    public static void main(String[] args) {
        System.out.println(invest(2000, 0.07, 1));

    }

    public static double invest(double amount, double rate, int year) {
        if (amount == 0 || rate == 0 || year == 0) {
            return 0;
        } else {
            return amount * (1 + (rate * year));
        }
    }
}

问题是,我不知道它是否是递归方法,如果不是。你能告诉我怎么做吗?

3 个答案:

答案 0 :(得分:2)

首先,简单地说,递归方法是一种自我调用的方法。例如,计算给定正整数n的阶乘的递归方法可以如下:

public int factorial(int n) {
    if(n == 1 || n == 0) return 1;
    return factorial(n - 1) * n;
}

因此,例如,factorial(3)会产生6.分解,“第一次调用”的返回值将是factorial(2) * 3,这正是3的阶乘。但是,相同的方法可以用非递归方式编写,如:

public int factorial(int n) {
   int result = 1;
   while(n > 0) {
       result *= n;
   }
   return result;
}

这需要一些练习和理解,但是你可以将每个递归方法编写为迭代方法,反之亦然。执行后者的技巧是尝试隔离循环中的“内部”逻辑,然后使用递归调用作为“推进”迭代的方式。我建议你先设计一个迭代方法,如:

public static double invest(double amount, double rate, int year) {
    //while year is not 0
       //apply rate over calculated amount
    //return calculated amount
}

从那里,尝试将其推断为递归逻辑。

答案 1 :(得分:0)

public class Investment {

    public static void main(String[] args) {
        System.out.println(invest(2000, 0.07, 1));
    }

    public static double invest(double amount, double rate, int year) {
        if(year > 0){
          double newAmount = amount + (amount * rate);
          return invest(newAmount, rate, year--);
        }
        return amount;
    }
}

递归方法只是你调用你在里面的方法,你可以看到我在invest内调用invest,但是当year到达{{1}时我停止这样做}}

答案 2 :(得分:0)

public class Compound_Interest
{
    public static void main(String [] args)
    {
        double amt=calc(100.00, 0.10, 3);
        System.out.println(amt);
    }
    public static double calc(double p, double r, double t)
    {
        //p is principal, r=rate, t=time
        if (p>0)
        {
            if (t>0)
            {       
                p=p*r+p;
                return (calc(p,r,t-1));
            }
            }
        return p;
    }
}
II使用单利计算公式来计算复利。简单的利息公式是:

SI = P R T。

所有单利(P R T)的累加被添加到原始原理中,以获取银行帐户的新价值。

调用语句从下至上添加。这遵循了后进先出(LIFO)的原则,这是递归的基础。

希望这会有所帮助!