MATLAB 是一种按值传递的语言。我有一个处理像素邻居的递归函数。每次调用函数时制作图像的副本(在我的情况下是两个图像)非常昂贵。
我使用全局变量来解决问题。有没有其他方法可以使递归函数修改数组?
MATLAB 是一种按值传递的语言。我有一个处理像素邻居的递归函数。每次调用函数时制作图像的副本(在我的情况下是两个图像)非常昂贵。
我使用全局变量来解决问题。有没有其他方法可以使递归函数修改数组?
您在这里有三个选项,但也许您不需要其中任何一个,因为 Matlab 使用“写时复制”,即只有在您修改变量时才会复制变量。
blockproc
,或im2col
重写该函数。最后,如果您想继续使用当前的方案,我强烈建议您使用持久变量而不是全局变量。
这是一个普遍的误解。尽管 MATLAB 的 sytanx 是按值传递的,但它实际上并不像在 C 中那样按值传递。解释器足够聪明,只在必要时进行复制。所以你应该继续按值传递,看看你是否遇到内存问题。
正如其他海报所指出的那样,无论如何您都应该尽量避免在 MATLAB 中使用递归。