2016-12-10 67 views
0

假设你有一个递归函数来改变全局变量的一部分。是否有可能跟踪对MATLAB中变量的更改?

例如,全局变量是一个从1到20的3D数组(即(:,:,20),并且在一个递归中(:,:,3)(:,:,5)被改变,并且在下一个递归中(:,:,7)(:,:,8)被改变。是否有可能知道什么时候创建了其中一个元素的每个值,所以看到,在第一个递归的第3和第5个元素被分配一个值,并在第二递归的第7和第8人?

+0

当然,只是做一个单独的载体'吨=零(1,20)',并创建一个元件在与递归计数填充它。 – beaker

回答

0

有一对夫妇的我能​​想到的办法。

  1. 将一个额外的参数传递给作为累加器的函数,并在最后返回它。这是标准的递归实践,如果你正在处理w因为递归,所以我不会进一步解释(尽管如此,尽管很高兴)。如果你以前没有处理过累加器,那么我会避免这种情况,因为它不是最简单的概念。

  2. 追加到一个全局变量从你的函数内部充当计数器并跟踪你希望它是什么。

  3. 或者,创建一个persistent变量中的功能,如计数器,而不是采取行动。您可以一直返回第一个调用(就像使用累加器一样),或者使用它来更新函数外部的全局变量。

  4. 可避免全局变量,如果你高兴,让您的递归函数由发电机函数返回的关闭,使得它具有与你的计数器变量的状态。

很高兴在上面的任何一个扩展。

+0

此外,只是指出,虽然理论上可以在matlab中执行简单的递归,但matlab并不是针对递归进行优化的语言,而对于非平凡的问题很可能会耗尽内存。除非这是一个微不足道的问题/任务,否则可能值得考虑使用其他矢量化方法。 –

相关问题