Die Methode ruft sich selbst.. rekursive?

public static int m(int i, int j)    
{     
  if ( i > j)    
    return 0;    
  else    
  {
    i++;    
    m(i++, j);
  }
  return i;    
}

Hatte ich zwei Fragen. 1.) Was wird zurückgegeben, indem out.print(m(3,8)); und 2.) Wie oft wird die Methode m aufgerufen? Das sollten auch die Antworten 5 und 7 zu entnehmen.

Wenn ich arbeitete heraus, Frage 1, ich kam mit 5 aber die Art, wie ich es Tat, es war falsch, weil die Methode nicht aufgerufen wurde, 7 mal, es wurde nur zweimal genannt. Die Art und Weise habe ich dies getan war ging ich direkt auf die else-Anweisung, da (i > j) war falsch am Anfang und Methode m aufgerufen wurde, auch dieses mal wieder mit (4, 8) ich dachte, es war immer noch falsch, also ging ich zurück zu der Zeile, wo m aufgerufen, und die variable, die ich geändert, um 5, weil die i++ im m(i++, j). Danach würde es wieder 5 für den Wert des ich.

Das war offensichtlich falsch, so fügte ich einige heraus.Drucke die Werte von i im gesamten Programm, um zu sehen, wie sich der Wert verändert und es ging von 3 bis 9 mit einer out.print(i); am Anfang der Methode m. Ein out.print(i); Recht vor return i; zeigten die Werte begonnen, gehen Sie rückwärts von 10 auf 5 und die Methode aufgerufen wurde 7 mal. Wie funktioniert das?

EDIT: Nach dem einloggen war ich in der Lage zu kommen mit etwas Logik, um es, aber ich möchte jemanden, um klarzustellen, dass es richtig ist.

Methode m aufgerufen wird mit 3,8 an den start. Nach, es ruft sich selbst mit dann 4,8 5,8....bis 9,8, wo der if-Anweisung wahr wird, und die Methode gibt 0 zurück. Es nannte sich 6 mal, so dass es beginnt, rückwärts gehen oder Dekrement-ing 6 mal so da m(i++, j) post(i), dann i wird 10 und 10 zurückgegeben wird, dann 9, dann 8, dann 7, 6, und schließlich 5. Wenn es wieder 10, 1, 9 2, 8 3, 7 4, 6 5, 5 6 war. So, da war es 6, wenn i = 5 ist, das war der Wert, der zurückgegeben wurde. Ist das richtig? Und wenn es ist, eine genauere Erklärung wäre schön zu haben.

1) Versuchen Sie es. 2) Melden Sie sich mit einer print-Anweisung.
Es gibt ähnliche Fragen wie stackoverflow.com/questions/16095176/... das könnte erklären das Verhalten.
Beantwortet ein großer Teil meiner Frage, danke

InformationsquelleAutor Oscar F | 2014-02-06

Schreibe einen Kommentar