2016-07-19 7 views
0

特定の条件で再帰からのすべての出力を格納するコードを記述しようとしています。再帰中の出力を格納する

私の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)を格納しようとしたが、成功せず。 それは他の関数でラップする必要があると思いますが、正しい方法でラップする方法がわかりません。 「;」が付いている場合は、印刷結果をexacllyで保存したいと思うようです。条件(ライン3)の内部で取り下げられます。

ありがとうございました!

+0

まあ、答えは関数の出力ですので、なぜ私は結果としてそれを得ることはできませんか?関数をループするか、正確にどこに格納するのが問題なのですか? – KiW

+0

物事は、私は 'If' statemantからの回答のみを保存したいと思っています。そこに到達する再帰によって何度もありますが、どうすればそのようにすることができますか?最終的な答えは、必要なN個の回答のうち1個だけです。 –

+0

サンプル入力とこの関数の出力を教えてください。 – beaker

答えて

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を定義したい:N[solutionSoFar remainingValue]が持つことのできる最大の長さよりも大きい

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 

おそらく最もエレガントな解決策ではありませんが、うまくいくはずです。

+0

私の答えは '[solutionSoFar remainingValue]'となる行列を作成することに注意してください。私はこれがあなたが望むものであるとは確信していません。私はあなたのコードを知らない。原則的に私の答えは、行列の連続した行に格納したいものを格納することを示唆しています – shamalaia

+0

nevermind、それを自分で解決しました。とにかくありがとう! –

関連する問題