0

我想通过使用递归函数来计算(对于一个项目)自我避免的随机游走。我已经设法用两个数组来做到这一点,StepXStepY分别跟踪路径的 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

请耐心等待,我不是经验丰富的程序员。

4

1 回答 1

2

不,您误解了 C 中参数的规则。为递归调用复制的是指向格的指针,而不是格数组本身。你必须自己做。

最简单的方法是在调用开始时分配一个新数组(with ),然后在递归调用结束时malloc复制数据。memcpyfree

于 2012-11-25T19:47:09.590 回答