这段代码如何反转? (递归)

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" &lt;= 1 以来,第三次递归将不再执行任何操作。而且,现在您回到第二次递归 第二次递归现在将交换"o""l" 并保持"r" 不变,这意味着:"lro" 这又回到了第一次递归。 最后第一个递归将交换"w""d" 并保持"lro" 不变,这意味着:"dlrow"。与"world"相反

【讨论】:

以上是关于这段代码如何反转? (递归)的主要内容,如果未能解决你的问题,请参考以下文章

递归函数:有人能解释一下这段代码是如何打印 1 到 5 的吗?

需要帮助跟踪二叉树的这种反转方法

如何使用递归反转字符串?

我想反转我的数组。为啥这段代码给出垃圾值?

以下代码迭代并输出香蕉,如何更改它以反转输出?

在 Java 中使用递归反转字符串