【发布时间】:2017-08-20 21:39:15
【问题描述】:
对于计算机科学课,我们正在学习递归函数,我个人不喜欢,但我们需要使用它。以下代码用于检查字符串输入 's' 是否为回文。
bool palindrome(string s)
{
int len = s.length();
char start = s.at(0);
char last = s.at(0);
if(len>1)
{
last = s.at(len);
}
if(start == last && len<=2)
{
return true;
}
else if(start != last)
{
return false;
}
else
{
s = s.substr(1, s.size() - 2);
return palindrome(s);
}
}
运行它并输入一个字符串后,我得到一个运行时错误“std::out_of_range”,我不确定我在哪里搞砸了。总的来说,我对递归函数和 c++ 很陌生,所以任何帮助都会很棒。
如果需要我未提供的任何其他信息,请告诉我。
*注意:我们需要使用布尔函数,并且只能调用我们输入到函数中的字符串。
【问题讨论】:
-
这与递归无关。
last = s.at(len);:如果 s 有 5 个字符,则 len 是 5,但是,s.at(5)当然会骂你,因为它不存在。递归是最少的问题。您需要正确掌握一些基于 0 的数组索引的基础知识。 -
记住这一点:有错误需要阅读。您的错误包含发生此错误的行,如果没有,请使用将显示此错误的调试工具运行。当您尝试访问不存在的数组/字符串中的位置(小于零或大于大小)时,会引发超出范围错误。手动处理你的代码,一步一步,然后你可能会发现错误。
-
“我们正在进入递归函数,我个人不喜欢”有些情况如果没有递归函数几乎是不可能解决的
-
除了@EliasSoares 所说的:据我所知——所有递归算法都可以重写为迭代算法,但在某些情况下,递归算法更直观。
标签: c++ function recursion boolean palindrome