2016-07-19 19 views
0

Ich versuche, einen Code zu schreiben, der alle Ausgaben einer Rekursion unter einer bestimmten Bedingung speichert.Ausgänge während der Rekursion speichern

Mein MATLAB-Code sieht wie folgt aus:

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 

ich nur die Ausgänge in einer Matrix zu speichern versucht, die die Bedingung (M == 1), aber ohne Erfolg erreichen. Ich denke, dass es in andere Funktion verpackt werden sollte, aber ich habe keine Ahnung, wie man es in der richtigen Weise wickeln. Es ist, als ob ich die Druckergebnisse genau speichern möchte, wenn das ';' ist innerhalb der Bedingung (Zeile 3) aufgenommen.

Vielen Dank im Voraus!

+0

gut, Antwort ist die Ausgabe der Funktion, so dass ich nicht verstehe, warum Sie es nicht als Ergebnis erhalten? Schleifen Sie über die Funktion oder wo genau ist das Problem beim Speichern? – KiW

+0

Die Dinge ist, dass ich nur die Antworten von der 'If' Statemant speichern möchte. Es gibt mehrere Male durch die Rekursion, die dort ankommen, wie kann ich so etwas tun? Die endgültige Antwort ist nur 1 von N Antworten, die ich brauche. –

+0

Können Sie uns eine Beispieleingabe und die gewünschte Ausgabe für diese Funktion geben? – beaker

Antwort

0

Ich glaube, das sollte funktionieren, wie Sie wollen:

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 

aber nicht die Größe von answer vielleicht wissen Sie (k,:) in etwas anderes ändern möchten. Auch wenn answer Änderungen Größe wünschen Sie answer vor der Schleife zu definieren:

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 

wo N größer als die maximale Länge, dass [solutionSoFar remainingValue] haben.

Vielleicht nicht die eleganteste Lösung .. aber es sollte funktionieren.

+0

Beachten Sie, dass meine Antwort eine Matrix erzeugt, in der die Zeilen "[solutionSoFar restantValue]" sind. Ich bin mir nicht sicher, ob du das willst. Ich kenne deinen Code nicht. Im Prinzip schlägt meine Antwort vor, zu speichern, was Sie in aufeinander folgenden Zeilen einer Matrix speichern möchten – shamalaia

+0

, habe es selbst gelöst. Danke trotzdem! –