用来分割整数的MATLAB函数
今天仿真需要用到分割整数的功能,没有查到Matlab里面关于整数分割的函数(可能因为我比较菜),所以自己写了一个将整数分割成任意数目的函数。
因为用的是递归,所以运行速度可能有点慢,但是对于比较小的数或者计算量少的场景,还是比较有用的。
话不多说,上代码!
主函数
function table_part = calcDivide(num_sum,num_part)
%% num_sum是被分割的数,num_part是被分割成的份数
%% 获取切分方案
list_sum = (1:num_sum+1)-1;
table_cut = calcNumCut(list_sum,num_part,[],[]);
table_part(:,1)=table_cut(:,1);
for ind = 2:num_part-1
table_part = [table_part,table_cut(:,ind)-table_cut(:,ind-1)];
end
table_part = [table_part,num_sum - table_cut(:,end)];
子函数
function [table_cut,list_cut] = calcNumCut(list_sum,num_part,table_cut,list_cut)
%% 递归获取切分位置
num_space = length(list_sum);
num_cut = num_part-1;
for ind_cut = 1:num_space
if(num_cut == 1)
temp_list_cut = [list_cut,list_sum(ind_cut)];
if(isempty(table_cut))
table_cut = temp_list_cut;
else
table_cut = [table_cut;temp_list_cut];
end
else
list_cut = [list_cut,list_sum(ind_cut)];
[table_cut,list_cut] = calcNumCut(list_sum(ind_cut:end),num_part-1,table_cut,list_cut);
end
end
if(~isempty(list_cut))
list_cut(end) = [];
end