-5

それは尋ねます:

再帰的ウサギ関数を変更して、実行の流れを視覚的に簡単にたどることができるようにします。「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 に答える