WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Rekursion "protokollieren"

 

JeefoWin32
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 24.12.09
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 01.12.2012, 19:12     Titel: Rekursion "protokollieren"
  Antworten mit Zitat      
Tag,

ich hab folgendes Problem: In einer Rekursion soll protokolliert werden, ob diese Fehlschlägt. D.h. ich durchlaufe einen try/catch Block, jetzt möchte ich praktisch im catch-Teil (Rekursion schlägt fehl) eine Zuweisung machen, die bis zur obersten Ebene zurückgegeben wird.

Eine einfache Zuweisung wird scheinbar irgendwie überschrieben, oder es gibt bei der Rekusrion selbst einen Fehler.

Code:

function nextStep(A,pos)
i=pos(1);
j=pos(2);

if(i<size(A,1) && A(i+1,j)==1) % first down
    pos1 = [i+1,j];
elseif(j<size(A,2) && A(i,j+1)==1) % right
    pos1 = [i,j+1];
elseif(j~=1 && A(i,j-1)==1) % left
    pos1 = [i,j-1];
end

if(pos1(1)==size(A,1)) % reached last column
    disp(['le found: ' num2str(pos1(1)) ',' num2str(pos1(2))])
    return
else
    try
        nextStep(A,pos1);
    catch err
        disp('le fail')
        return
    end
end
end
 


Falls der Sinn der Funktion relevant sein sollte, kann ich das gerne auch noch erläutern Very Happy
Schreibt man nun als Rückgabe z.B. nach der found-Ausgabe a=1; und im catch-Teil a=0; gibts in der Rekursion einen Fehler.

Wie löst man das ganze geschickt?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.12.2012, 22:06     Titel: Re: Rekursion "protokollieren"
  Antworten mit Zitat      
Hallo JeefoWin32,

Zitat:
... die bis zur obersten Ebene zurückgegeben wird.

Aber Deine Funktion gibt gar keine Werte zurück!
Es fehlt also noch ein Output:
Code:

function Reply = nextStep(A,pos)
Reply = [];
i=pos(1);
j=pos(2);

if(i<size(A,1) && A(i+1,j)==1) % first down
    pos1 = [i+1,j];
elseif(j<size(A,2) && A(i,j+1)==1) % right
    pos1 = [i,j+1];
elseif(j~=1 && A(i,j-1)==1) % left
    pos1 = [i,j-1];
end

if(pos1(1)==size(A,1)) % reached last column
    disp(['le found: ' num2str(pos1(1)) ',' num2str(pos1(2))])
    return
else
    try
        Reply = nextStep(A,pos1);
        if ~isempty(Reply)
          ... handle the error
        end
    catch err
        disp('le fail')
        Reply = err;
        return
    end
end
end
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JeefoWin32
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 24.12.09
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 02.12.2012, 17:28     Titel:
  Antworten mit Zitat      
Jap, genau die Lösung hatte ich auch nach ein paar Stunden.
Nun geht auch alles wies soll.
Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.