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