Alternative to for loop i.e. recursion
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
My code like this but what should I do to change the code so that it automatically calcultes the matrix for p=4 without using for loops. I want to convert this function into a recursive function.
function M=FakLoop3
p=3;
v=0;
indis=zeros(1,p);
M=zeros(2^p,p)
for i=0:1
indis(1)=i;
for j=0:1
indis(2)=j;
for k=0:1
indis(3)=k;
v=v+1;
M(v,:)=indis;
end
end
end
end
4 commentaires
Réponses (1)
Jan
le 3 Avr 2019
Modifié(e) : Jan
le 3 Avr 2019
Inlined dec2bin(0:2^p-1):
M = rem(floor((0:2^p-1).' .* 2 .^ (1-p:0)), 2)
Another solution:
M = zeros(2^p, p, 'uint8');
n1 = 1;
n2 = 2^(p-1);
v = uint8([0;1]);
for k = 1:p
M(:, k) = repmat(repelem(v, n2, 1), n1, 1);
n1 = n1 * 2;
n2 = n2 / 2;
end
Or:
M = zeros(2^p, p, 'uint8');
v = uint8(0:2^p-1).';
for k = p:-1:1
M(:, k) = bitget(v, 1);
v = bitshift(v, -1);
end
With doubles instead:
M = zeros(2^p, p, 'uint8');
v = (0:2^p-1).';
for k = p:-1:1
M(:, k) = rem(v, 2);
v = floor(v / 2);
end
0 commentaires
Voir également
Catégories
En savoir plus sur Function Creation dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!