-5

它问:

修改递归 rabbit 函数,使其在视觉上易于遵循执行流程。不只是添加“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);
    }
}
4

2 回答 2

2

在 SO 上,我们尽量不为作业提供代码解决方案,值得称赞的是,您只是在寻求提示。

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

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

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

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

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

那么:调用的级别数rabbit和缩进量之间有什么关系?

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

于 2013-09-02T01:15:52.907 回答
0

我想你会踢自己,你需要做的就是在这两种情况下使用 value 变量。

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;
}
于 2013-09-02T05:16:11.413 回答