почему мое возвращаемое значение из рекурсивной функции неправильно - PullRequest
0 голосов
/ 16 мая 2018

Моя функция получает массив символов, размера, текущего места и счетчика.
Мне нужно , чтобы напечатать все возможные комбинации A, B, C (без AA и без CCC)в длину введенного размера.
Когда размер больше 3, значение функции возвращает недопустимое значение, которое я не нашел для этого.

int abc(char arr[],int lastPlace,int curPlace,int count){
    if (curPlace == lastPlace){
        arr[curPlace] = '\0';
        printf("%s, ", arr);
        return 1;    
    }
    if(!curPlace || arr[curPlace - 1] != 'A'){
        arr[curPlace] = 'A';
        count += abc(arr, lastPlace, curPlace + 1, 0);
    }
    arr[curPlace] = 'B';
    count += abc(arr, lastPlace, curPlace + 1, 0);
    if(curPlace < 2 || arr[curPlace - 1] != 'C' || arr[curPlace - 2] != 'C'){
        arr[curPlace] = 'C';
        count+=abc(arr, lastPlace, curPlace + 1, 0);
        if (curPlace == 0)
            return count;
    }
}

1 Ответ

0 голосов
/ 16 мая 2018
int abc(char arr[], int lastPlace, int curPlace, int count) 
{
    if (curPlace == lastPlace)
    {
        arr[curPlace] = '\0';
        printf("%s, ", arr);
        return 1;
    }
    if(!curPlace || arr[curPlace-1]!='A'){
        arr[curPlace] = 'A';
        count += abc(arr, lastPlace, curPlace + 1, 0);
    }

    arr[curPlace] = 'B';
    count += abc(arr, lastPlace, curPlace + 1, 0);

    if(curPlace < 2 || arr[curPlace - 1] != 'C' || arr[curPlace - 2] != 'C')
    {
        arr[curPlace] = 'C';
        count += abc(arr, lastPlace, curPlace + 1, 0);
    }
    return count;
}
...