C ++使用递归调用

时间:2016-04-15 15:43:35

标签: c++ recursion

金融服务公司保证每月复合投资回报率为1%。您希望了解总投资额达到1,000,000美元(百万美元)加上回报需要多长时间。编写一个程序,允许用户输入每月连续投资(例如 - 每月500美元)或(每月1000美元)。该程序应调用递归方法,该方法返回并显示达到$ 1,000,000目标所需的总月数。

以下是我到目前为止,该程序没有显示任何内容。谢谢!

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

// Function prototypes. 
int financeRecursion(int, int, int);

int main()
{
    int investment = 0;
    int month = 0;
    int totalMonths = 0;

    cout << "Enter the amount of money you want to invest.\n\n";
    cin  >> investment;

    totalMonths = financeRecursion(investment, month, investment); // Function call. 
    if (totalMonths > 0)
        cout << totalMonths;
    else
        return 0;
} // End of main.

// Function definitions. 
int financeRecursion(int money, int months, int money2)
{
    if (money <= 0)
        {return 0;} // Base case. 
    if (money2 <= 1000000)
        {return financeRecursion(money, 
                                 months + 1, 
                                 money2 + money2 * 1.01);} // Recursive call. 

} // End of function. 

1 个答案:

答案 0 :(得分:0)

让我们看看我们是否可以总结并解决这个问题:

  1. 您没有输出,因为您的唯一打印语句不会显示任何内容。
  2. 没有什么可以显示的,因为当你达到100万美元时,你的递归例程就会在没有显示的情况下失败:可以返回的唯一值是无效投资的0。
  3. 从整数移动到浮点数。否则,100美元的分数的利息会丢失,你得到错误的答案。例如,小于100美元的投资将产生无限循环。
  4. 我认为你的递归通话中存在计算错误:增加的投资是 money ,而不是 money2 。我认为这个表达应该是

    money + money2 * 1.01
    
  5. money&lt; = 0 是错误情况,不是基本情况。这应该在主程序中。递归的终止案例是当投资价值达到一个巨大的价格时。或者,你可以从100万美元起,除以1.01,直到达到或低于投资价值。

  6. 学习基本调试。首先,加入额外的印刷声明。你生病了;问疼在哪里。例如,在 financeRecursion 的顶部插入一个print语句,用于输出输入参数。这将在一定程度上跟踪数据流和执行流程。
  7. 使用更多描述性变量名称。 (钱,月,钱2)并不明显;尝试更像(principal,num_period,invest_value)的集合。这可能就是您在 money2 递归中添加错误的主要内容的原因。