【问题标题】:self-avoiding random walks on a lattice in C with recursion - memory allocation使用递归在 C 中的格上自我避免随机游走 - 内存分配
【发布时间】:2012-11-27 01:12:56
【问题描述】:

我想通过使用递归函数来计算(对于一个项目)自我避免的随机游走。我已经设法使用两个数组 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

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

【问题讨论】:

    标签: c recursion random-walk


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您花时间回复。这绝对是正确的方法……我学到了一件非常了不起的事情。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多