自分自身を再帰的に呼び出す関数があり、無限ループに入った場合に検出して終了したい。つまり、同じ問題で再び呼び出される。それを行う最も簡単な方法は何ですか?
編集:これは関数であり、xとyの異なる値で再帰的に呼び出されます。再帰呼び出しでペア(x、y)の値が繰り返される場合に終了したい。
int fromPos(int [] arr, int x, int y)
関数が純粋に機能する場合、つまり状態や副作用がない場合、Set
呼び出された引数のいずれかを保持できます(編集:編集内容を確認すると、(x、y)のペアのセットを保持します)で、毎回現在の引数がセットに含まれているかどうかを確認してください。そうすれば、サイクルに非常に早く遭遇した場合に、サイクルを検出できます。ただし、引数のスペースが大きく、繰り返しに時間がかかる場合は、サイクルを検出する前にメモリが不足する可能性があります。もちろん、これは停止の問題なので、一般的には実行できません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加