2017-11-20 2 views
0

Ich habe diesen Code:seltsame Verhalten mit rekursive Funktion

public void myFunction(String label, String type, string command, int attempts = 0) 
    { 
     try 
     { 
      Utility.Logger("myFunction attempt " + attempts.ToSafeString() + " label " + label + " type " + type, command); 
      ...stuff... 
     } 
     catch (Exception e) 
     { 
      if (attempts < 10) 
       return myFunction(label, type, command, attempts++); 
      else 
       return null; 
     } 
    } 

Wie Sie sehen können, habe ich einen rekursiven Aufruf in der Fangzweig, wo ich einen Parametersatz einen Zähler = Zähler + 1

Der seltsame Punkt ist, ich habe immer Versuche = 0 in meinem Protokoll. Warum? Was vermisse ich?

+1

Fallen Sie tatsächlich in Fangen? Und selbst wenn Sie jedes Mal, wenn Sie dort gehen Versuche Null Wert wird zurückgesetzt Sie vorbei. – johnyTee

+1

'Versuche ++' wird _old_ Wert zurück und dann Wert um 1 erhöhen. So Sie immer 0 an Ihre rekursive Funktion übergeben. Ändern Sie das in "++ Versuche" oder besser nicht in einem solchen Kontext und erhöhen Sie einfach außerhalb des Funktionsaufrufs. – Evk

Antwort

7

attempts++ Schritten attemptsdanach, tut es vor recursing.

0

Versuchen Sie, attempts++ zu zu ändern.

UPD: Hoppla, hat zu lange gedauert.