我正试图解决这个递归。我很难回复字符串:
string reverse(string);
int main() {
cout << reverse("1234") << endl;
} // end main
string reverse(string integer) {
if (integer == "")
return "";
else
return reverse(integer.substr(1, integer.length()));
} // end reverse
我知道这个功能有小问题(我希望)。你能帮帮我修理吗?谢谢,
答案 0 :(得分:1)
试试这个
string reverse(string integer) {
if (integer.length() == 0)
return "";
else
return reverse(integer.substr(1, integer.length())) + integer.substr(0,1);
} // end reverse
请参阅live demo。
答案 1 :(得分:0)
您的问题是,在到达空字符串之前,您将继续对较短的字符串进行递归 由于你从来没有做任何带有递归调用结果的东西,你也最终得到了空字符串。
如果你希望字符串的第一个字符结束,你需要在某处使用 ,你不能把它扔掉。
你应该把第一个字符放在反转字符串其余部分结果的后面,如下所示:
string reverse(string s)
{
if (s == "")
return "";
else
return reverse(s.substr(1, s.length())) + s[0];
}
或更短
string reverse(string s)
{
return s.empty() ? "" : reverse(s.substr(1)) + s[0];
}