对于一个采用字符数组存放的字符串str,设计一个递归算法要判断str是否为回文。要求先写出递归模型,再写出对应的递归程序。(注意一定要写完整,包括主函数)用从C++编写
时间: 2024-10-29 12:09:50 浏览: 38
为了判断一个采用字符数组存放的字符串 `str` 是否为回文,我们可以使用双指针法,一个从头开始,一个从尾结束,逐个比较字符是否相等。如果它们都相等并且两个指针还没相遇,那么继续比较下一个字符;如果不相等或者其中一个指针超出了范围,则说明不是回文。
递归模型可以这样描述:对于一个长度大于0的字符串 `str` 和它的最后一个字符 `c`,如果 `c` 等于 `str[strlen(str) - 1]`(即倒数第一个字符),那么 `str[0...strlen(str)-2]` (去掉最后一个字符后的部分)也是回文,这时我们可以递归地调用函数检查剩余的部分。如果 `c` 不等于 `str[strlen(str) - 1]`,则直接返回 `false` 表示不是回文。
下面是一个完整的 C++ 递归程序实现:
```cpp
#include <iostream>
using namespace std;
bool isPalindromeHelper(const char* str, int start, int end) {
// Base case: 如果只有一个字符或者空字符串,它是回文的
if (start >= end)
return true;
// 检查起始字符和末尾字符是否相等
if (*str != str[end])
return false;
// 递归检查除首尾外的其他部分
return isPalindromeHelper(str + 1, start + 1, end - 1);
}
bool isPalindrome(const char* str) {
// 调用辅助函数,传入整个字符串和开始、结束指针
return isPalindromeHelper(str, 0, strlen(str) - 1);
}
int main() {
string inputStr;
cout << "Enter a string to check for palindrome: ";
getline(cin, inputStr);
bool result = isPalindrome(inputStr.c_str());
if (result)
cout << inputStr << " is a palindrome.\n";
else
cout << inputStr << " is not a palindrome.\n";
return 0;
}
```
阅读全文