实现算法:定义一个全局变量作为字符数组的标识指针,依次对比首元素和尾元素,如果出现不匹配就返回异常并结束当前运行的函数。
递归时改变传入长度的数值实现首元素和尾元素的比较,递归以标识指针和改变后的length相差1为结束。
当前缺陷:无法通过只传入字符数组进行程序判断,必须传入字符数组长度、需要定义一个全局变量
实现代码如下:
int i=0; //定义全局变量 int fun(char c[] , int length){ if(length -1 - i <= 1) return c[i]==c[length-1]; //递归出口 if(c[i++] == c[length - 1]){ //递归判断 fun(c , length -1 ); }else return 0; }
最初的想法是length-1 == i ,作为递归出口,实际发现只能测试出奇数个字符时的情况,因为在字符串长度为奇数时比是偶数时多进行一次递归,所以在字符串长度为偶数时 i 和 length - 1最最多相差1
改进方法是:考虑到奇数长度时可以不用管中间元素,直接当作偶数处理,所以最后的一次递归就是以两个数相差1作为结尾,返回一个判断
多加一个参数可以替换全局变量 i ,还能使函数可以多次运行
全部代码
#include<stdio.h> int i=0; int fun(char c[] , int length){ if(length -1 - i <= 1) return c[i]==c[length-1]; if(c[i++] == c[length - 1]){ fun(c , length -1 ); }else return 0; } int main(void){ char c[] = {"bfsba"}; if(fun(c , 5)){ printf("yes"); }else printf("no"); }