如何在函数
中提到的约束之后使用递归来反转字符串string reverse_recurse(string forward) { // recursive
// Constraints: No loops allowed; no static local or global variables.
// Your new code goes here...
return "";
}
答案 0 :(得分:3)
对于任何递归问题,我们需要1)使我们更接近解决方案的单个步骤,2)对较小问题的递归调用,以及3)我们可以立即返回的基本情况。
我建议单步执行交换第一个和最后一个字符,同时将所有内部字符传递给递归调用。
def reverse_recurse(forward):
return forward[last] +
reverse_recurse(forward[second .. one_before_last]) +
forward[0]
因此,reverse_recurse("abcd")
会返回d + reverse_recurse(bc) + a
。
我们的基本案例根本不涉及任何工作。如果原始字符串具有偶数个字符,则基本情况是传入的forward
是空字符串。如果原始字符串具有奇数个字符,则基本情况是传入的forward
具有单个字符(原始字符串中的中间字符)。
def reverse_recurse(forward):
if forward.len() is 0 or 1:
return forward
return forward[last] +
reverse_recurse(forward[second .. one_before_last]) +
forward[0]
如果你理解我提出的建议,你可以用C ++实现它。 (提示:std::string::substr()
存在。)
在评论中,谢尔盖提出了一个更容易的选择。单步是隔离最终字符,递归调用是在最后一个字符串上:
def reverse_recurse(forward):
if forward.len() is 0 or 1:
return forward
return forward[last] +
reverse_recurse(forward[first .. one_before_last])
现在,由于作业截止日期已经过去,这是我的实施。
string reverse_recurse(string forward) {
if (forward.size() == 0)
return forward;
return reverse_recurse(forward.substr(1)) + forward.substr(0, 1);
}
答案 1 :(得分:0)
以下是Robᵩ回答中描述的第二种方法的快速实现。基本上,返回与其他元素相反连接的字符串的最后一个元素。
#include <iostream>
#include <string>
std::string reverse_string(std::string a_string) {
return
a_string.length() > 0 ?
a_string.back()
+ reverse_string(a_string.substr(0, a_string.length() - 1)) :
std::string();
}
int main() {
std::string a_string = "live on time , emit no evil";
std::cout << a_string << std::endl;
std::cout << reverse_string(a_string) << std::endl;
return 0;
}