フィルターのクリア

Alternative to for loop i.e. recursion

2 ビュー (過去 30 日間)
Maaz ul mosaid
Maaz ul mosaid 2019 年 4 月 3 日
編集済み: Jan 2019 年 4 月 3 日
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 件のコメント
Maaz ul mosaid
Maaz ul mosaid 2019 年 4 月 3 日
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 2019 年 4 月 3 日
編集済み: Jan 2019 年 4 月 3 日
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.

サインインしてコメントする。

回答 (1 件)

Jan
Jan 2019 年 4 月 3 日
編集済み: Jan 2019 年 4 月 3 日
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

カテゴリ

Help Center および File ExchangeFunction Creation についてさらに検索

タグ

製品


リリース

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by