递归程序

时间:2010-05-24 05:14:05

标签: c++ recursion

我正在尝试制作一个计算每年利息的递归程序。它会提示用户启动金额(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); 
    } 
} 

5 个答案:

答案 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);
}