私は再帰をあまり理解していません。私はクラスプログラムに取り組んでいます。私はほとんどのプログラムを再帰に変換しました。だから、私の教授は私たちにループを使わせたくないし、複数のパラメータを使うことも望まない。ループを再帰に変換するにはどうすればよいですか?
プログラムはハイルストーンシーケンスを実行し、問題を抱えている関数はハイルストーンシーケンスの長さを計算します。私は自分のやり方で働いていましたが、彼の基準に従っているかどうかを確認したかったのです。 (彼の基準ではありません)
私はこの機能を実行するより良い方法があるかどうかを知りたかったのです。私が試したときに抱えていた問題は、カウンターを決してリセットせず、1からnまでのハイルストーンシーケンスを合計するため、静的変数を使用できないということでした。私はハンドシム(私はそれが私が欲しかったよりもリセットされたと信じることを拒否したので)をしたときに、それが私の機能にカウントを残すことによってそれをやってみました。また、答えは必要ありません。
私はむしろ私自身でそれを理解しようとしています。だから、誰かが私に「式」またはループを再帰に変換するためのガイドを与えることができるかどうかを尋ねてきました。 参照として、私はhailstoneシーケンスの長さを見つけるhailstoneLengthコードを貼り付けます。しかし、もしあなたが私にそれをする方法を教えたいのであれば、あなたはそれがどのように機能するのか説明できれば大丈夫ですか?私はそれを解決するために最も可能性の高いいくつかの手のシミュレーションを行います。
ループ:
int hailstoneLength(int n)
{
int count = 1;
int u = n;
while(u != 1)
{
u = hailNext(u);
count++;
}
return count;
}
再帰:
int hailstoneLength(int n, int count = 1)
{
int u = n;
if(u != 1)
{
return hailstoneLength(hailNext(u), count + 1);
}
else // if u = 1
{
return count;
}
}
私はそれがリセットすることなく、パラメータ、または関数であることカント以来のカウントを働くいくつかの機能を行うために必要なことを考えていました。
ありがとうございました
末尾再帰ではありません。そこからそのフォームに簡単に書き換えることができますか? –