打印括号对,得到分段错误

时间:2011-12-19 22:58:47

标签: c segmentation-fault parentheses

我想在C中打印出括号中n-paris的所有有效组合。主要是我给出一个值3.这就是我要打印出有效括号的所有组合,其中3个左括号和3个右括号。但是,我得到了分段错误,gdb打印到_printValidParentheses(str, leftCount--, rightCount, count++);行。我想知道为什么我弄错了?感谢。

void printString(char * str) {
    while (*str) {
        printf("%c", *str++);
    }
    printf("\n");
}

void _printValidParentheses(char str[], int leftCount, int rightCount, int count) {
    if (leftCount < 0 || rightCount < 0) {
        return;
    }

    if (leftCount == 0 && rightCount == 0) {
        printString(str);
        return;
    } else {
        if (leftCount > 0) {
            str[count] = '(';
            _printValidParentheses(str, leftCount--, rightCount, count++);
        } 

        if (rightCount > leftCount) {
            str[count] = ')';
            _printValidParentheses(str, leftCount, rightCount--, count++);
        }

    }
}

void printValidParentheses(int n) {
    char *str = malloc(sizeof(char) * n * 2);
    _printValidParentheses(str, n, n, 0);
}

int main() {
    printValidParentheses(3);
    return 1;
}

1 个答案:

答案 0 :(得分:3)

您可以减少/增加此行中的变量:

_printValidParentheses(str, leftCount--, rightCount, count++);

只有在调用函数之后才会得到StackOverflow,因为每次都使用相同的参数调用函数,并且递归调用自身。