How do I create multiple for loops depending on the array size?

17 views (last 30 days)
I would like to iterate over multiple for-loops, but the amount of for-loops depends on the size of a vector. Is there a good way to do this, without using a lot of if-statements?
arr = [a1 a2 ... an]
for a1=1:...
for a2=1:...
...
for an=1:...
%do something
end
end
end
for for examle if the vector arr has "n" entries I would like to have "n" for loops.

Accepted Answer

Jan
Jan on 20 May 2018
Edited: Jan on 20 May 2018
As in the answers you find in Stephen's links: Use an index vector instead of a list of for loops. Replace:
arr = [a1 a2 ... an]
for i1 = 1:a1
for i2 = 1:a2
...
for in = 1:an
%do something with [i1, i2, ... in]
end
end
end
By:
% Loops from 1 to a(n):
n = length(arr)
ini = ones(1, n);
fin = [a1 a2 ... an];
v = ini;
iterN = prod(find - ini + 1); % Number of iterations
for iter = 1:iterN
% Do something with v
...
% Increase index vector:
for k = 1:n % Or n:-1:1, as you want to
if v(k) < fin(k)
v(k) = v(k) + 1;
break; % Stop "for k" loop
end
v(k) = ini(k); % Reset this index
end
end

More Answers (2)

Stephen23
Stephen23 on 20 May 2018
Edited: Stephen23 on 20 May 2018
A recursive function is the obvious solution, although this depends on whether you count recursive functions as being "a good way to do this", as they are famously fickle beasts, and are not always easy to debug. Often the best solution is to use indexing, as Jan Simon explained in this answer. Recursive functions, indexing and other solutions have been discussed before:

Walter Roberson
Walter Roberson on 20 May 2018
Edited: the cyclist on 23 May 2018

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!