Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;递归兔子赋值_C++_Recursion - Fatal编程技术网

C++ C++;递归兔子赋值

C++ C++;递归兔子赋值,c++,recursion,C++,Recursion,它要求: 修改递归rabbit函数,使其在视觉上易于遵循执行流程。不只是添加“Enter”和“Leave”消息,而是根据当前递归调用的“深度”缩进跟踪消息 通过在递归兔子函数中正确地添加空格,可以更好地理解递归的工作原理 这是程序应显示的内容: Enter rabbit: n = 4 Enter rabbit: n = 3 Enter rabbit: n = 2 Leave rabbit: n = 2 value = 1 Enter rabbit: n

它要求:

修改递归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);
}
}
#包括
#包括
int兔(int);
使用名称空间std;
int main()
{

所以,我们尽量不给作业提供代码解决方案,值得赞扬的是,您只要求提示

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

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

  • 第一次调用的输出没有缩进

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

  • 下一次调用的输出再缩进3个空格

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


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

    我想你会自责的,你需要做的就是在这两种情况下都使用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;
    }
    
    int兔子(int n,int参数)
    {
    int值;
    对于(int i=0;i你没试过兔子的功能吗?:-)这个借口太弱了!你真丢脸…非常感谢你的回答。我设法让它更接近它应该是什么样子。但是,我不知道我怎么才能得到“离开兔子:n=3”和“离开兔子:n=4”显示。我做错了什么吗?我将编辑我的主要帖子,以获得最新的代码。再次感谢您的帮助。只是一个提示,但请尝试保存要返回的值,然后在返回之前打印带有它的左行。非常感谢。到目前为止,我的程序显示:Enter rabbit:n=4 Enter rabbit:n=3输入兔子:n=2离开兔子:n=2值=1进入兔子:n=1离开兔子:n=1值=1进入兔子:n=2离开兔子:n=2值=1,但我缺少“离开兔子:n=3值=2”和“离开兔子:n=4值=3”,有没有关于如何显示最后两个的线索?差不多了。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;
    }