【发布时间】:2012-08-06 22:55:48
【问题描述】:
我最近在一次采访中被问到这个问题。作为一个刚毕业的学生,并且只编程了大约 2 年(所有学校工作),我不知所措。我有一个模糊的想法,但我确定我失败了。这是我写的:
string Reverse(string word, string reversed)
{
if(word.length() == 0)
{
return reversed;
}
else
{
string temp;
reversed = word.substr(0,1) + reversed;
temp = word.substr(1);
Reverse(temp, reversed);
}
return reversed;
}
现在我到家了,我正在测试它,返回的只是输入中的第一个字母。我对递归的概念模糊熟悉,但我显然在这方面失败了。非常感谢任何帮助/指针/建议。谢谢。
编辑: 根据 Dennis Meng 的帖子,我做了以下更改:
string Reverse(string word, string reversed)
{
if(word.length() == 0)
{
return reversed;
}
else
{
string temp;
reversed = word.substr(0,1) + reversed;
temp = word.substr(1);
return Reverse(temp, reversed);
}
}
现在,我得到了正确的返回值。非常感谢你。
【问题讨论】:
-
有什么问题?他们是否要求您使用递归来解决它?
-
为什么
Reverse函数需要两个参数? -
如果我在面试中问这个问题,我一直在寻找的答案是涉及使用反向迭代器对构造一个新字符串。我不会给你一个完整的答案 - 你可以自己查一下。
-
@Marko:面试问题不必“难以回答”。面试不应该是一场竞赛,因为通常你需要一个好的候选人而不是冠军。
-
@SChepurin 非常如此 - 通常情况下,需要勤奋、更初级的完成者,而不是团队中另一个自负的明星开发者,有时预算会限制你的工作聘请。期望指导新的团队成员也没有错——但这在很大程度上取决于项目环境和有人来做这件事。你永远不想要的是一种责任,以后你会因为表现不佳而难以解雇。
标签: c++ string recursion reverse