2016-03-28 78 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"