C语言递归的应用之回文字符

来源:互联网 发布:国产 cpu.知乎 编辑:程序博客网 时间:2024/05/22 05:05

递归应用之回文字符的判别:

  有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。

输入:
          字符串

输出:
          Yes或者No

说明:
          如输出Yes,说明输入的字符串是一个回文字符串
          输出No,说明输入的字符串不是一个回文字符串
          请使用递归算法实现。

代码如下:

  1. #include<stdio.h>  
  2. #include<string.h>  
  3.   
  4.   
  5. int huiwen(char str[],int a,int b )  
  6. {  
  7.     if(str[a]!=str[b]) {  
  8.         return 0;  
  9.     }  
  10.     else if(a==b||(a+1==b&&str[a+1]==str[b])) {  
  11.         return 1;  
  12.     }  
  13.     else if(str[a]==str[b])  {  
  14.         return huiwen(str,a+1,b-1);  
  15.     }  
  16. }  
  17.   
  18. int main()  
  19. {  
  20.     char str[800];  
  21.     int t,p;  
  22.     gets(str);    
  23.     t=strlen(str);  
  24.     if(t==0)  
  25.         printf("Yes\n");  
  26.     else {  
  27.         p=huiwen(str,0,t-1);  
  28.         if(p==1)  
  29.             printf("Yes\n");  
  30.         else if(p==0)  
  31.             printf("No\n");   
  32.     }  
  33.     return 0;  
  34. }  

递归算法首先要明确算法的结束标志,在这个代码中,如果是回文数,结束标志是(a==b||(a+1==b&&str[a+1]==str[b])),就是当判断到了最后一组数了,应当结束,通常递归中使用if语句来作为判断语句。

特别的,在这个算法中,不断传的是数组,变换的是下标,也可以直接直接变换数组,return huiwen(str++,a,b,),此时实参直接从str1开始传给形参。



0 0
原创粉丝点击