我有从函数返回的问题。 这是一个搜索功能,如果该功能找到我给出的值,则应该返回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;
}
答案 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函数,因为否则,递归调用将不执行任何操作。