我接到了一项任务:
写一个给定初始投资金额($)和利率和年数的递归方法,它计算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));
}
}
}
问题是,我不知道它是否是递归方法,如果不是。你能告诉我怎么做吗?
答案 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)的原则,这是递归的基础。
希望这会有所帮助!