私はいくつかの C の演習を開始し、入力を介して三角形を出力する必要があるこの素晴らしい演習を見つけました。入力6の場合、印刷されます
*
**
***
****
*****
******
*****
****
***
**
*
今見てみると、まあ、そんなに大変な作業じゃないな、と思いました。そこで、再帰を使用して、ループを使用せず、変数を 2 つだけ使用して作成することにしました。関数は次のようになります。
void PrintTriangle(int iMainNumber, int iCurrNumber)
{
//Logic goes here
}
数時間後、関数が出力する三角形の数を「記憶」できるようにするには、関数に十分な情報を渡す必要があるため、これが思ったよりもはるかに難しいことに気付きました。
それで、それが可能かどうかを尋ねることにしました。
(ループなし、他の関数なし、再帰のみであることを忘れないでください)。
編集: これは宿題ではなく、純粋な好奇心からです。しかし、私はおそらくあなたのために検証することはできません. これでなんとか中途半端になった
void PrintTriangle(int iMainNumber, int iCurrNumber)
{
if (iMainNumber == 0)
{
printf("\r\n");
}
else if (iMainNumber == iCurrNumber)
{
printf("\r\n");
PrintTriangle(iMainNumber - 1, 0);
}
else
{
printf("%s", MYCHAR);
PrintTriangle(iMainNumber, iCurrNumber + 1);
}
}
反対の関数を作成しようとして行き詰まりました。それができれば、iMainNumber と iCurrNumber が正または負であるという事実を利用して、関数フローをナビゲートできると思います。
つまり、パラメーターが負の場合は、入力の長さから 1 を引いた長さに降順の星を出力し、パラメーターが正の場合は、入力の長さに昇順の星を出力します。
フラグの使用について考えましたが、2 つの整数の代わりにはなりません。
別のフラグを追加して 2 つの整数と 1 つのフラグがあれば解決できるかもしれませんが、前述のように、整数を 2 つに制限しようとしました。
私が考え始めているのは、2つ以上の整数と再帰を使用せずに、このメソッドで昇順の星を出力するために必要な情報を渡す方法がないということです。
しかし、私はまだそれについて確信が持てないので、質問です。