这段代码如何反转? (递归)
Posted
技术标签:
【中文标题】这段代码如何反转? (递归)【英文标题】:How can this code be reversed? (recursion) 【发布时间】:2016-03-28 08:57:05 【问题描述】:从 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];
【问题讨论】:
它计算last + middle + first
,同时也反转中间。有什么问题?
它是什么;为什么你不明白“它”是如何被逆转的?
【参考方案1】:
显然,让您感到困惑的是递归。所以,这里有一个例子:
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"
相反
【讨论】:
以上是关于这段代码如何反转? (递归)的主要内容,如果未能解决你的问题,请参考以下文章