再帰的構文
#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
}
}