Borrar filtros
Borrar filtros

Alternative to for loop i.e. recursion

2 visualizaciones (últimos 30 días)
Maaz ul mosaid
Maaz ul mosaid el 3 de Abr. de 2019
Editada: Jan el 3 de Abr. de 2019
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 comentarios
Maaz ul mosaid
Maaz ul mosaid el 3 de Abr. de 2019
This is not a homework. I am trying to replace the for loops so that it can vary with p, I think recursive is the solution to this problem. Please post the solution if you can.
Jan
Jan el 3 de Abr. de 2019
Editada: Jan el 3 de Abr. de 2019
I've posted an efficient solution already. I repeat it in an answer. Of course you can solve this by recursion, but the shown method is much more efficient.

Iniciar sesión para comentar.

Respuestas (1)

Jan
Jan el 3 de Abr. de 2019
Editada: Jan el 3 de Abr. de 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

Categorías

Más información sobre Function Creation en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by