C语言递归实现判断回文数


实现算法:定义一个全局变量作为字符数组的标识指针,依次对比首元素和尾元素,如果出现不匹配就返回异常并结束当前运行的函数。

递归时改变传入长度的数值实现首元素和尾元素的比较,递归以标识指针和改变后的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");
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM