c语言,利用递归判断回文

读入一个字符串,如果是回文,输出YES,否则输出NO

#include <stdio.h>
#include <string.h>
int main(void)
{
char p[100] = {0};
int i, t, n;
gets(p);
n = t = strlen(p);
--n;
t /= 2;
for (i = 0; i<t; ++i)
{
if (*(p + i) != *(p + n - i))
{
break;
}
}
if (i >= t)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-10
#include<iostream.h>
int f(char str[100],int i,int leng)
{
if(str[i]!=str[leng-i-1]) return 0;
if(i==leng/2) return 1;
f(str,i+1,leng);
}
void main()
{
char str[100];
cin>>str;
for(int i=0;str[i]!='\0';i++);
if (f(str,0,i)) cout<<"YES";
else cout<<"NO";
cout<<endl;
}

验证 正确 给分追问

可是我都读不懂。。。

追答

我晕 哪里不懂 前一半颠倒和后一半比较 如果出现不相等的 就不是回文,一共比较长度一半次数

c[100]
I
----> <----
abccba
012345

c[0]=c[5]='a' c[i=0]=c[6-i-1] i++
c[1]=c[4]='b' c[i=1]=c[6-i-1] i++
c[2]=c[3]='c' 2==5/2 return 1; 是回文

c[100]
I
abc

c[0]!=c[2] return 0 不是回文

我靠 你要的是递归 不给我分 啥意思,服了

相似回答