C ++递归兔子任务

时间:2013-09-02 00:45:19

标签: c++ recursion

它问道:

修改递归兔子函数,以便在视觉上轻松地遵循执行流程。只需添加“Enter”和“Leave”消息,根据当前递归调用的“深度”缩进跟踪消息。

通过在递归兔函数中正确添加空格,更好地了解递归的工作原理。

这是程序应该显示的内容:

Enter rabbit: n = 4
   Enter rabbit: n = 3
      Enter rabbit: n = 2
      Leave rabbit: n = 2 value = 1
      Enter rabbit: n = 1
      Leave rabbit: n = 1 value = 1
   Leave rabbit: n = 3 value = 2
   Enter rabbit: n = 2
   Leave rabbit: n = 2 value = 1
Leave rabbit: n = 4 value = 3

我真的不知道如何获得正确的缩进或如何显示n大于2的“离开兔子”。到目前为止,我的代码是:

#include <iostream>
#include <iomanip>

int rabbit(int);

using namespace std;

int main()
{
    cout << rabbit(4) << endl;
    return 0;
}

int rabbit(int n)
{
cout << "Enter rabbit: n = " << n << endl;

if(n <=2)
{
    cout << "Leave rabbit: n = " << n << endl;
    return 1;
}
else
{
    return rabbit(n - 1) + rabbit(n - 2);
}
}

有人能指出我正确的方向吗?非常感谢你。

编辑:

我有点接近,但它仍然缺少显示“离开兔子:n = 3”和“离开兔子:n = 4”的能力。

这是我的新代码:

#include <iostream>
#include <iomanip>

int rabbit(int, int);

using namespace std;

int main()
{
    int months;

    cout << "How many months?" << endl << "Months ::: ";
    cin >> months;
    cout << rabbit(months, 0) << endl;
    return 0;
}
int rabbit(int n, int parameter)
{
    int value;

    for(int i = 0; i < parameter; i++)
    {
        cout << " ";
    }
    cout << "Enter rabbit: n = " << n << endl;

    if(n <=2)
    {
        for(int i = 0; i < parameter; i++)
        {
            cout << " ";
        }
        value = 1;
        cout << "Leave rabbit: n = " << n << " value = " << value << endl;
        return value;
    }
    else
    {
        return rabbit(n - 1, parameter + 1) + rabbit(n - 2, parameter + 1);
    }
}

2 个答案:

答案 0 :(得分:2)

在SO上,我们尽量不为作业提供代码解决方案,而且您只是要求提示。

解决任何问题的关键是要说清楚。

如果查看所需的输出,可以看到

  1. 第一次调用的输出没有缩进。

  2. 下一次调用的输出缩进3个空格。

  3. 下一次调用的输出会缩进3个空格。

  4. 那么:rabbit的调用级别与缩进量之间的关系是什么?

    如果对rabbit有更多,更深入的调用,我们会期望一个好的解决方案继续工作,提供更高级别的缩进。

答案 1 :(得分:0)

我认为你会踢自己,所有你需要做的就是在两种情况下使用值变量。

int rabbit(int n, int parameter)
{
    int value;

    for(int i = 0; i < parameter; i++)
    {
        cout << " ";
    }
    cout << "Enter rabbit: n = " << n << endl;

    if(n <=2)
    {
        value = 1;
    }
    else
    {
        value = rabbit(n - 1, parameter + 1) + rabbit(n - 2, parameter + 1);
    }
    for(int i = 0; i < parameter; i++)
    {
        cout << " ";
    }
    cout << "Leave rabbit: n = " << n << " value = " << value << endl;
    return value;
}