1

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;
}
4

1 に答える 1

3

この行の変数をデクリメント/インクリメントします。

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

関数を呼び出した後でのみ、StackOverflowを取得します。これは、関数が毎回同じ引数で呼び出され、それ自体が再帰的に呼び出されるためです。

于 2011-12-19T23:03:42.250 に答える