我正在尝试制作一个计算每年利息的递归程序。它会提示用户启动金额(1000),利率(10%)和年数(1)。(括号内为样本)
手动我意识到兴趣来自公式YT(1 + R)-----第一年的兴趣是1100.
第二年YT(1 + R / 2 + R2 / 2)// R平方
第二年YT(1 + R / 3 + R2 / 3 + 3R3 /)// R立方
如何编写一个计算兴趣的递归程序?以下是我试过的功能
//编辑后的最新内容
double calculateInterest2(double start, double rate, int duration)
{
if (0 == duration) {
return start;
} else {
return (1+rate) * calculateInterest2(start, rate, duration - 1);
}
}
答案 0 :(得分:6)
我冒昧地用Java测试你的函数(语法类似),它返回了奇怪的结果。这是我得到的:
calculateInterest2(1000, .1, 0); // = 1000.0
calculateInterest2(1000, .1, 1); // = 1200.0
calculateInterest2(1000, .1, 2); // = 1420.0
calculateInterest2(1000, .1, 3); // = 1662.0
calculateInterest2(1000, .1, 4); // = 1928.2
显然,这是不对的。首先,返回行也重新应用计算....这是对方法的重写:
static private double calculateInterest2(double start, double rate, int duration)
{
if (0 == duration) {
return start;
} else {
return (1+rate) * calculateInterest2(start, rate, duration - 1);
}
}
如您所见,此方法使用此输出检出:
calculateInterest2(1000, .1, 0); // = 1000.0
calculateInterest2(1000, .1, 1); // = 1100.0
calculateInterest2(1000, .1, 2); // = 1210.0
calculateInterest2(1000, .1, 3); // = 1331.0
calculateInterest2(1000, .1, 4); // = 1464.1000000000001
对我来说更合适。
答案 1 :(得分:2)
基本上,递归函数F通过计算F(N-1)的答案的F(N)的答案加上第N个案例的额外工作来工作。当然,您必须提供N == 0(或1或其他)
的终止结果因此,在您的情况下,N年的复利将是:
Interest(S,R,N) = (S + Interest(S,R,N-1)) * R
,其中
Interest(S,R,0) = S * R
您应该能够更改代码以轻松表示。
答案 2 :(得分:1)
你忘了递减duration
,所以你最终得到一个无限循环(或者更有可能是递归,堆栈溢出)。
您对calculateInterest
的结果也没有任何作用,因此您将返回第一年的值:
return calculateInterest(cpdInterest, rate, duration - 1);
此外,您可能希望将duration
更改为int
,或处理案例0 < duration < 1
。
答案 3 :(得分:1)
除了不减少持续时间(导致无限递归)之外,看起来你没有对从递归调用中获得的数据做任何事情。编写递归函数的关键在于知道何时停止,以及知道如何处理从每次调用中获取的数据。
在这种情况下,你希望在年数为0时停止。如果你在银行存钱0年,你将没有兴趣,所以在0的情况下,你想要返回0。
对于大于0的持续时间,由于您要计算多年来累积的总利息,您应该将当前年度的利息与剩余年份的利息相加(其中startUp金额也将包括利息)从现在和过去的几年)。所以你有类似
的东西return (startUp*rate) + calculateInterest(startUp*(1+rate), rate, duration-1);
答案 4 :(得分:0)
我使用C
中的函数制作了这个程序//include standard libraries
#include<stdio.h>
//user defined function
float cmp_i(float prin,float rate,int time);
//start of main function
main()
{
//declaration of variables
float prin,rate,ci;
int time;
//input by the user
printf("Please enter the principle ammount\n");
scanf("%f", &prin);
printf("Please enter thr rate of interest\n");
scanf("%f",&rate);
printf("Please enter the time in years");
scanf("%d", &time);
//calculation and result display
ci=cmp_i(prin,rate,time);
printf("The compound interest for the given ammount is %f",ci);
}//end of main function
//start of cmp_i function
float cmp_i(float prin,float rate,int time)
{
//declaration of variables
int i;
float intr=0;
intr=(prin*rate)/100;
for(i=01;i<=time;i++)
{
intr=intr+(intr*rate)/100;
}
return(intr);
}