再帰関数を使用して、(プロジェクトの) 自己回避ランダム ウォークを計算したいと考えています。私は 2 つの配列StepX
でそれを行うことができStepY
、パスの x と y をそれぞれ追跡します。再帰関数は次のようなものです。
go(int x, int y, int n,int* StepX,int* StepY)
これは、「n 番目のステップでは、(x,y) に移動し、StepX と StepY に行ったことを思い出してください」に要約できます。
プロジェクトは終了し、私は満足していますが、速度を向上させるために、1 と 0 で訪れた/まだ訪れていない場所を表すラティスを (また) 使用して機能させる方法を知りたいと思います。
として機能を拡張することを考えました
go(int x, int y, int n,int* StepX,int* StepY, int* lattice)
go
関数が呼び出されるたびに、ラティスの新しいコピーを作成し、それを操作すると思ったので、私が探していたものです。しかし、これは明らかにそうではありません。一方向を探索した後 (および許可された再帰の最大レベルに達した後)、より低いレベルの再帰に進んでも、ラティスはまだ同じであり、訪問した場所 (のより深いレベル) とマークされていますが、再帰の各レベルがラティスの異なるコピーで機能するようにしたかったのです。
それは間違った期待ですか?それは間違った実装ですか?このアプローチで必要なメモリ サイズを減らすためのアドバイスはありますか?
私のコード (実際にはほとんど書いていません) はここにあります: https://gist.github.com/4144833
私は経験豊富なプログラマーではありません。