【发布时间】:2023-04-01 05:00:01
【问题描述】:
假设我们有向量v=[1,2,3],我们想要构建包含在v 中的所有数字组合的矩阵,即
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
由于我不擅长递归,首先我尝试编写代码来使用for循环构建这样一个矩阵
makeLoop([1,2,3])
function A = makeLoop(v)
loops=length(v);
for i = 1:loops
dummy=v;
m=factorial(loops)/loops;
A((1+m*(i-1)):m*i,1)=v(i);
v(i)=[];
loops2=length(v);
for j = 1:loops2
dummy2=v;
m2=factorial(loops2)/loops2;
A(((1+m2*(j-1))+m*(i-1)):(m2*j+m*(i-1)),2)=v(j);
v(j)=[];
loops3=length(v);
for k = 1:loops3
m3=factorial(loops3)/loops3;
A(((1+m2*(j-1))+m*(i-1)):(m2*j+m*(i-1)),3)=v(k);
end
v=dummy2;
end
v=dummy;
end
end
它似乎可行,但显然为更大的v 写这一切就像地狱一样。无论如何我不明白如何正确编写递归,我认为递归结构将是这样的
function A = makeLoop(v)
if length(v)==1
"do the last for loop"
else
"do a regular loop and call makeLoop(v) (v shrink at each loop)"
end
但我不知道应该从原始代码中删除哪些部分,以及保留哪些部分。
【问题讨论】:
标签: matlab matrix combinations