再帰的構文

#include <stdio.h>
#include <string.h>     //strlen

//--------------------------------------------
int A(char ch);     //定義判定関数

//--------------------------------------------
int i;          //ループカウンタ
char ch;        //配列から1文字保持
char *s;        //文字列記録用

//--------------------------------------------
int main(int argc, char *argv[]){

   s= argv[1];     //argvの文字列取得
   ch= s[0];       //chに配列sの始めの/文字を記録
   int len;        //文字列長さ
   
   len= strlen(s);             //文字列長さ保持
   
   if( A(ch) ){                //関数からの返却値が1か
       if(len == i+1){         //文字列長さと調べ終わった位置が同じ
           printf("YES\n");    //1ならYES    
       }else{
           printf("NO\n");     //1以外ならNO
       }
   }else{
       printf("NO\n");     //1以外ならNO
   }

//printf("%d %d",len, i);           //文字列長さ確認用

return 0;       //終了
}


//------------------------------------------
//計算の判定関数
int A(char ch){
//    printf("%c\n", ch);     //文字列確認用
   
   switch(ch){
       case 'x':   return 1;               //B()で判定 変数(x)
       
       case 'f':   ch= s[++i];             //fなら次の文字を
                   return ( A(ch) );       //計算なら判定を返却f計算
       
       case 'g':   ch= s[++i];             //gなら次の文字を
                   if( A(ch) ){            //判定した結果が計算なら
                       ch= s[++i];         //その次の文字も
                       return ( A(ch) );   //判定して返却 g計算計算
                   }
                       
       default :   return 0;               //所行以外NG
       
   }
   
}

いいなと思ったら応援しよう!