2016-03-28 8 views
-5

Got Code von Pierre Fourgeaud (Internet), aber ich kann nicht verstehen, wie es umgekehrt werden kann?Wie kann dieser Code umgekehrt werden? (Rekursion)

void reverse(string& word) 
{ 
    if (word.size() <= 1) return; 

    // Get the string without the first and the last char 
    string temp = word.substr(1, word.size() - 2); 

    // Reverse it 
    reverse(temp); 

    // Recompose the string 
    word = word.substr(word.size() - 1) + temp + word[0]; 
} 
+0

Es berechnet "last + middle + first" während auch die Mitte umgekehrt. Was ist das Problem? –

+0

was ist es? und warum verstehst du nicht, wie 'es' umgekehrt werden kann? –

Antwort

0

Offensichtlich ist es die Rekursion, die Sie verwirrt. So, hier ist ein Beispiel:

  • Erste Rekursion wird geteilt "world" zu: "w" , "orl" and "d" und es wird "orl" zum zweiten Rekursion passieren.
  • Zweite Rekursion teilt "orl" zu: "o" , "r" and "l" und es wird "r" an die dritte Rekursion übergeben.
  • Dritte Rekursion wird nichts tun seit size of "r" <= 1. Und jetzt gehen Sie zurück zur zweiten Rekursion
  • Zweite Rekursion wird nun tauschen "o" und "l" und lassen "r", wie es ist, was bedeutet: "lro" und dies geht zurück auf die erste Rekursion.
  • Schließlich erste Rekursion tauscht "w" und "d" und läßt "lro", wie es ist, was bedeutet: "dlrow". Welches ist das Umgekehrte von "world"
Verwandte Themen