2016-12-10 65 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並不是針對遞歸進行優化的語言,而對於非平凡的問題很可能會耗盡內存。除非這是一個微不足道的問題/任務,否則可能值得考慮使用其他矢量化方法。 –

相關問題