char dst[100]; void parentheses_match(char dst[], int k, int left_remain, int left_used, int right_used, int M) { if (right_used >= M) { dst[k] = '\0'; printf("%s\n",dst); return; } if (left_remain <= 0 && left_used < M) { dst[k] = '('; parentheses_match(dst,k+1,left_remain+1,left_used+1,right_used,M); } else if (left_used < M) { dst[k] = '('; parentheses_match(dst,k+1,left_remain+1,left_used+1,right_used,M); dst[k] = ')'; parentheses_match(dst,k+1,left_remain-1,left_used,right_used+1,M); } else { dst[k] = ')'; parentheses_match(dst,k+1,left_remain-1,left_used, right_used+1,M); } } int _tmain(int argc, char* argv[]) { const int M = 10; parentheses_match(dst,0,0,0,0,M); return 0; }