2016-03-28 65 views
-5

從Pierre Fourgeaud(互聯網)得到代碼,但我不明白它是如何顛倒?該代碼如何反轉? (遞歸)

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

它計算'last + middle + first',同時也反轉中間。有什麼問題? –

+0

什麼是它;爲什麼你不明白'它'可以被扭轉? –

回答

0

很明顯,這是遞歸混淆你。所以,這裏有一個例子:

  • 首先遞歸會分裂"world"到:"w" , "orl" and "d",它會通過"orl"到第二遞歸。
  • 第二次遞歸會將"orl"分割爲:"o" , "r" and "l"並且它會將"r"傳遞給第三次遞歸。
  • size of "r" <= 1開始,第三次遞歸將不會執行任何操作。而且,現在你回去第二遞歸
  • 現在二遞歸將交換"o""l"離開"r",因爲它是,這意味着:"lro",這可以追溯到第一遞歸。
  • 最後,第一次遞歸將交換"w""d"並保留原來的"lro",這意味着:"dlrow"。哪個是"world"