回文是一种字符串,它正着读和反着读都是一样的。比如level,eye都是回文。用迭代的方法可以很快地判断一个字符串是否为回文。用递归的方法如何来实现呢?
首先我们要考虑使用递归的两个条件:
- 第一:这个问题是否可以分解为形式相同但规模更小的问题?
- 第二:如果存在这样一种分解,那么这种分解是否存在一种简单情境?
#include"iostream" #include<stdio.h> #include"string" #define MAX 100 using namespace std; /*这是错误的,传进str的整个string则没有办法化解成小问题,这里需要指 之后强行把string str 改为指针也不对,会出现异常错误。 int per(int n ,string str){ if (n == 1 && n == 0) return 1; else { per(n - 2, str[1]); } } */ int per(int n, char *str) { if (n == 1 || n == 0) return 1; else { if (str[0] == str[n - 1]) per(n - 2, &str[1]); else return -1; } } int main() { int len; char str[MAX]; while(1) { printf("please enter the word :"); //os<<s scanf("%s", &str); len = (int)strlen(str); int result = per(len, str); if (result == 1) printf("true "); else printf("fault "); } system("pause "); }