私は次の再帰関数を持っています
public int Factorial(int number_to_calculate)
{
if (StackChanged != null)
{
StackChanged(new CustomEventArgs(StackValue, Result));
}
System.Threading.Thread.Sleep(wait_time);
if (number_to_calculate == 0)
{
StackValue--;
return 1;
}
else
{
StackValue++;
Result = (number_to_calculate * Factorial(number_to_calculate - 1));
}
if (StackChanged != null)
{
StackChanged(new CustomEventArgs(StackValue, Result));
}
StackValue--;
System.Threading.Thread.Sleep(wait_time);
return Result;
}
どうやら私のスーパーバイザーは私が2回のリターンを持っていても大丈夫ではありませんが、関数を再帰的にしたいと思っています。だから私は1回の返品で済みます。戻り値を1つだけにするために、gotoで始まるアキュムレータを使用しようとしましたが、関数がそれ自体を呼び出すたびにStackValueをインクリメントし、再帰が発生したときにデクリメントする必要があります。このように、いつ出てくるのかわかりません。
誰かアイデアはありますか?