从C ++ / C函数返回的问题

时间:2018-12-03 19:48:23

标签: c++ c arrays function

我有从函数返回的问题。 这是一个搜索功能,如果该功能找到我给出的值,则应该返回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 :(得分:2)

当您使用return时,您将返回到调用方,这在递归函数中通常会表示相同的函数。

更改

rech(tab,n,i,r);

return rech(tab,n,i,r);

答案 1 :(得分:2)

让我们一起走遍它。

第一次调用rech时:

我们第一次调用rech: rech(tab = {1,2,3,4,5}, n = 5, i = 0, r = 2)i < n还是0 < 5?这是真的。 现在我们检查是tab[i] == r还是1 == 2。这是错误的。 我们增加i并重新开始

我们第二次调用rech: rech(tab = {1,2,3,4,5}, n = 5, i = 1, r = 2)tab[i] < r还是1 < 5?这是真的。 现在我们检查是tab[i] == r还是2 == 2。这是真的。 我们将1返回到第一次调用rech。

回到我们第一次调用rech: rech(tab, n, i, r)返回了1。因此,按照编码术语,这将是 看起来像1;,什么都不做。

现在,我们完成了if语句,并向main返回0。

main现在将输出0,程序结束。

这是调试代码的过程。

要让程序将1返回到main,则要使其返回rech函数,因为否则,递归调用将不执行任何操作。