rec_loop
A recursive loop function. Returns all permutations of vectors of length loop_depth containing numbers from 1 to N. E.g., loop_depth = 1 and N = 3 gives [1; 2; 3]; loop_depth = 3, N = 2 gives
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
2 2 2
The function is useful when you need to nest loops, but don't know how deep the nesting will be.
function loop_matrix = rec_loop(varargin)
% loop_matrix = rec_loop(loop_depth, N)
%
% Thomas Gladwin, 2007.
loop_depth = varargin{1};
if length(varargin) > 2,
current_level = varargin{2};
N = varargin{3};
else,
current_level = 1;
N = varargin{2};
end;
if current_level == loop_depth,
loop_matrix = (1:N)';
else,
loop_matrix = [];
to_the_right = rec_loop(loop_depth, current_level + 1, N);
for n = 1:N,
[nR, nC] = size(to_the_right);
loop_matrix = [loop_matrix; ones(nR, 1) * n to_the_right];
end;
end;