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