我正在尝试编写一个代码,用于在特定条件下存储递归的所有输出。
我的MATLAB代码如下所示:
function answer= rec_solve(M, remainingValue, previousLevel, solutionSoFar)
if (M == 1)
answer= [solutionSoFar remainingValue];
% store only the outputs that reach here
else
for i=previousLevel:remainingValue/M
s= [solutionSoFar i];
rec_solve(M-1, remainingValue-i, i, s);
end
end
end
我试图在矩阵中仅存储达到条件的输出(M == 1),但没有成功。 我认为它应该包含在其他功能中,但我不知道如何以正确的方式包装它。 这就像我想要存储打印结果,如果';'在条件内被删除(第3行)。
提前谢谢大家!
答案 0 :(得分:0)
我认为这应该可以按你的意愿运作:
function answer= rec_solve(M, remainingValue, previousLevel, solutionSoFar)
k=0;
if (M == 1)
k=k+1;
answer(k,:)= [solutionSoFar remainingValue];
% store only the outputs that reach here
else
for i=previousLevel:remainingValue/M
s= [solutionSoFar i];
rec_solve(M-1, remainingValue-i, i, s);
end
end
end
但不知道answer
的大小,您可能希望在其他内容中修改(k,:)
。
此外,如果answer
更改了您希望在循环之前定义answer
的大小:
function answer= rec_solve(M, remainingValue, previousLevel, solutionSoFar)
answer=zeros(1,N);
k=0;
if (M == 1)
k=k+1;
answer(k,1:numel([solutionSoFar remainingValue])= [solutionSoFar remainingValue];
% store only the outputs that reach here
else
for i=previousLevel:remainingValue/M
s= [solutionSoFar i];
rec_solve(M-1, remainingValue-i, i, s);
end
end
end
其中N
大于[solutionSoFar remainingValue]
可以拥有的最大长度。
也许不是最优雅的解决方案..但它应该有用。