實現算法:定義一個全局變量作為字符數組的標識指針,依次對比首元素和尾元素,如果出現不匹配就返回異常並結束當前運行的函數。
遞歸時改變傳入長度的數值實現首元素和尾元素的比較,遞歸以標識指針和改變后的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"); }