2015-08-24 51 views
0

我有以下的MATLAB代碼,其確實的可變嵌套循環:保存由遞歸環路(MATLAB)生成的矢量

function rec_function(numLoops, loopVars, index, NINT) 
if numLoops == 0 
    loopVars 
    return 
end 

for k = 1:NINT(1,index) 
    loopVars(1,index) = (k-1)/(NINT(1,index)-1); 
    rec_function(numLoops-1, loopVars, index+1, NINT); 
end 
end 

其中突出顯示的部分將做這樣的事情:

>> rec_function(2,zeros(1,2),1, [2 2]) 

loopVars = 

    0  0 


loopVars = 

    0  1 


loopVars = 

    1  0 


loopVars = 

    1  1 

我想問如何將矩陣中每個迴路的矢量回路變量保存爲進一步使用,例如:

A = [0 0; 0 1; 1 0; 1 1] 
+0

這樣嗎? 'A = [A; loopVars]' – rst

+0

是的,我在if部分做了這個,但是它說變量A在它被定義之前就被使用了。 –

+0

'>> rec_function(2,零(1,2),1,[2 2]) 未定義函數或變量「A」。 rec_function(第3行)中的錯誤 A = [A; loopVars]; rec_function中的錯誤(第9行) rec_function(numLoops-1,loopVars,index + 1,NINT); rec_function(第9行)中的錯誤 rec_function(numLoops-1,loopVars,index + 1,NINT);' –

回答

1

一個簡單的解決方案是使用global variables

function rec_function(numLoops, loopVars, index, NINT) 
global loopVars_all; 
if numLoops == 0 
    loopVars_all(end + 1, :) = loopVars; 
    return 
end 

for k = 1:NINT(1,index) 
    loopVars(1,index) = (k-1)/(NINT(1,index)-1); 
    rec_function(numLoops-1, loopVars, index+1, NINT); 
end 
end 

你這樣稱呼它:

global loopVars_all; 
loopVars_all = []; 
rec_function(2, zeros(1,2), 1, [2 2]); 
loopVars_all 

loopVars_all = 

    0  0 
    0  1 
    1  0 
    1  1