递归解括号匹配一定要双返回值吗?

int f(char str[],int s){ //用这个对字符数组的每一个元素去判断该左括号是否匹配
if (s==strlen(str)){ //返回值大于0就认为这个左括号是匹配的
return -2;
}
else{
if (str[s]=='('){
if (str[s+1]==')'){
return s+1; //其中一个问题在这里 对于形如 (()() 这样的就无法使得第一个元素返回值小于0

}
else {
if (f(str,s+1)>=0){
return f(str,f(str,s+1)+1);
}
else{
return -2;
}
}
}
else {
return s;
}
}
}