C++递归rabbit赋值

C++ Recursive rabbit assignment

本文关键字:赋值 rabbit 递归 C++      更新时间:2023-10-16

它询问:

修改递归rabbit函数,使其在视觉上易于遵循执行流程。不只是添加"Enter"answers"Leave"消息,而是根据当前递归调用的"深度"来缩进跟踪消息

通过在递归rabbit函数中正确添加空白,可以更好地理解递归是如何工作的。

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

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

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

编辑:

我有点接近,但它仍然缺少显示"Leave rabbit:n=3"answers"Leave rabbit: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);
    }
}

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

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

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

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

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

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

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

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

我想你会后悔的,你所需要做的就是在这两种情况下都使用值变量。

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;
}