проблема с возвратом из функции в c ++ / c - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть эта проблема с возвращением из функции.это функция поиска, она должна возвращать 1, если функция находит значение, которое я даю, но Нет, она возвращает 0 вместо 1. (извините за мой плохой английский.)

int rech(int tab[],int n,int i,int r){
    if(i<n){
        if(tab[i]==r){
            return 1;
        }
        i++;
        rech(tab,n,i,r);
    }

    return 0;
}

int main(int argc, char** argv) {
    int tab[5]={1,2,3,4,5};
    printf("%d",rech(tab,5,0,2));
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Давайте пройдемся по нему вместе.

Когда в первый раз вызывается rech:

Первый раз, когда мы вызываем rech: rech(tab = {1,2,3,4,5}, n = 5, i = 0, r = 2) is i < n или 0 < 5?Это правда.Теперь мы проверяем, если tab[i] == r или 1 == 2.Это неверноМы увеличиваем i и начинаем заново

Второй раз, когда мы называем rech: rech(tab = {1,2,3,4,5}, n = 5, i = 1, r = 2) is tab[i] < r или 1 < 5?Это правда.Теперь мы проверяем, если tab[i] == r или 2 == 2.Это правда.Мы возвращаем 1 назад в первый раз, когда вызывается rech.

Назад в первый раз, когда мы вызываем rech: rech(tab, n, i, r) возвращено 1. Итак, в терминах кодирования это будет выглядеть как 1;, который ничего не делает.

Теперь мы закончили с оператором if и вернули 0 в main.

main теперь выводит 0 и программа завершается.

Это процесс отладки кода.

Чтобы программа вернула 1 обратно в main, вместо этого вы захотите, чтобы она возвращала функцию rech, потому что в противном случае рекурсивный вызов ничего не делает.

0 голосов
/ 03 декабря 2018

Когда вы используете return, вы вернетесь к вызывающей стороне, что в рекурсивной функции будет означать одну и ту же функцию большую часть времени.

Изменить

rech(tab,n,i,r);

на

return rech(tab,n,i,r);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...