得到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 :(得分:0)
显然,这是让你感到困惑的递归。所以,这是一个例子:
string word = "world";
"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"