我想創建一個向量串列,其中串列中每個向量的元素總和為回圈變數,而不考慮元素的順序和重復。例如。
k=1, list ={[1]};
k=2, list ={[1,1],[2]};
k=3, list ={[1,1,1],[1,2],[2,1],[3]};
k=4, list ={[1,1,1,1],[1,3],[3,1],[2,2],[2,1,1],[1,2,1],[1,1,2],[4]};
等等。串列的長度為 $2^{k-1}$。在 MATLAB 中是否有任何簡單的策略可以做到這一點?
uj5u.com熱心網友回復:
有一個簡單的遞回策略:如果你有一個整數磁區串列,其和為 some k-1,很容易生成帶有 sum 的磁區k:給定某個磁區,我們可以附加一個 1 來創建一個新磁區,或者我們可以只增加最后一個條目。所以這樣的事情應該可以作業。
k = 5;
sumk = {[1]}; % anchor
for current_sum = 2:k % recursion
new_sumk = {};
% (a) create new list by appending an 1
new_append = cellfun(@(x)[x,1], sumk, 'Un', 0);
% (b) create new list by increasing last element
new_increment = cellfun(@(x)[x(1:end-1), x(end) 1], sumk, 'Un', 0)
sumk = [new_append, new_increment];
end
% print the whole thing:
for l = 1:length(sumk)
disp(sumk{l})
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470711.html
下一篇:在回圈中執行具有間隔的任務
