在递归期间存储输出

时间:2016-07-19 23:23:57

标签: algorithm matlab recursion store

我正在尝试编写一个代码,用于在特定条件下存储递归的所有输出。

我的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行)。

提前谢谢大家!

1 个答案:

答案 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]可以拥有的最大长度。

也许不是最优雅的解决方案..但它应该有用。