Рекурсивная функция VS If-Else - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь создать рекурсивную функцию в C, которая возвращает длину строки.

Если я делаю это с блоком If-Else, он работает как положено:

int myFunctionCountRecursive(const char* s, int i) {

    if (s[i] != '\0') {
        i++;
        myFunctionCountRecursive(s, i);
    }
    else
        return i;
} 

Но когда я пытаюсь сделать это с троичным, я вижу, что переменная i тоже увеличивается, но после возврата функция запускается второй раз и уменьшается i?

int myFunctionCountRecursive(const char* s, int i) {

    (s[i] != '\0') ? myFunctionCountRecursive(s, ++i) : 0;
    return i;
}

In Чтобы получить ожидаемый результат, я должен написать:

int myFunctionCountRecursive(const char* s, int i) {

    return (s[i] != '\0') ? myFunctionCountRecursive(s, ++i) : i;
}

Кто-нибудь может объяснить, почему такое поведение произошло? Спасибо

1 Ответ

0 голосов
/ 27 марта 2020

Ваш второй код по сути это

int myFunctionCountRecursive(const char* s, int i) {

    if (s[i] != '\0')
        myFunctionCountRecursive(s, ++i);
    else
        0;

    return i;
}

, который явно отличается от первого. return i всегда будет выполняться в конце концов. В то время как с первым и третьим только когда (s[i] != '\0') это false.

...