我只是在摆弄这个函数,不知何故回文返回 74。我正在使用 Visual studio 2022。它是否应该不返回任何内容并捕获编译器错误,因为在下面的情况下永远不会返回 false?
bool palindromes(string str) {
if (str.length() == 0 || str.length() == 1) return true;
if (str[0] == str[str.length() - 1])
palindromes(str.substr(1, str.length() - 2));
else
return false;
}
int main()
{
cout << palindromes("lol");
}
Run Code Online (Sandbox Code Playgroud)
palindromes(str.substr(1, str.length() - 2));是递归的典型错误。我想您想对该调用返回的值执行某些操作,但您忽略了它。递归函数的工作方式与非递归函数非常相似,没有隐式return.
str.length() == 0 || str.length() == 1非常相关,当此条件为时,该函数不会返回任何内容false,但此条件str[0] == str[str.length() - 1]为true。
这条线
palindromes(str.substr(1, str.length() - 2));
Run Code Online (Sandbox Code Playgroud)
什么也没做。该函数获取按值传递的参数,并且返回值被忽略。
不从声明为返回某些内容的函数中返回某些内容是未定义的行为。
使固定:
return palindromes(str.substr(1, str.length() - 2));
Run Code Online (Sandbox Code Playgroud)
但可能还有其他问题。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |