题目来自于待字闺中的微信。
要求:对一个字符串进行括号匹配,要求是 使用递归,不可以使用任何循环语句。
如"a(bc((def)(gh))i)j"
思路:
1、一般来讲, 递归和循环是可以互相转换的。不允许使用循环,就要用递归结构来实现循环。
2、括号匹配一般是使用栈结构。 栈和递归又有很紧密的联系。
要求:对一个字符串进行括号匹配,要求是 使用递归,不可以使用任何循环语句。
如"a(bc((def)(gh))i)j"
思路:
1、一般来讲, 递归和循环是可以互相转换的。不允许使用循环,就要用递归结构来实现循环。
2、括号匹配一般是使用栈结构。 栈和递归又有很紧密的联系。
下面是我的实现方法。我利用参数state来记录当时的括号栈的状态。
#include<stdio.h>
#define OK 1
#define ERROR -1
int match(char *str, int state)
{
if(*str == '\0')
{
if(state == 0)
return OK;
else
return ERROR;
}
if(state<0)
return ERROR;
if(*str == '(')
return match(str+1, state+1);
else if(*str == ')')
return match(str+1, state-1);
else
return match(str+1, state);
}
int main()
{
char a[50];
int result = 0;
printf("Enter your string: ");
scanf("%s", a);
result = match(a, 0);
if (result == 1)
printf("Yes Match!\n");
else if(result == -1)
printf("Not Match!\n");
else
printf("Error!\n");
return 1;
}