C++ 从c+中的函数返回时出现问题+/C

C++ 从c+中的函数返回时出现问题+/C,c++,c,arrays,function,C++,C,Arrays,Function,我在从函数返回时遇到这个问题。 这是一个搜索函数,如果函数找到了我给出的值,它应该返回1,但不是,它返回的是0而不是1。(对不起,我的英语不好。) int rech(int tab[],int n,int i,int r){ 如果(i当您使用return时,您将返回到调用者,在递归函数中,这在大多数情况下意味着相同的函数 改变 rech(tab,n,i,r); 到 当您使用return时,您将返回到调用者,在递归函数中,调用者在大多数情况下都表示相同的函数 改变 rech(tab,n,i,r)

我在从函数返回时遇到这个问题。 这是一个搜索函数,如果函数找到了我给出的值,它应该返回1,但不是,它返回的是0而不是1。(对不起,我的英语不好。)

int rech(int tab[],int n,int i,int r){

如果(i当您使用
return
时,您将返回到调用者,在递归函数中,这在大多数情况下意味着相同的函数

改变

rech(tab,n,i,r);


当您使用
return
时,您将返回到调用者,在递归函数中,调用者在大多数情况下都表示相同的函数

改变

rech(tab,n,i,r);


让我们一起走一遍

第一次调用rech时:

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

我们第二次打电话给rech:
rech(tab={1,2,3,4,5},n=5,i=1,r=2)
tab[i]
还是
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函数,否则递归调用将不起任何作用。

让我们一起来看看它

第一次调用rech时:

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

我们第二次打电话给rech:
rech(tab={1,2,3,4,5},n=5,i=1,r=2)
tab[i]
还是
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函数,否则递归调用将不起任何作用。

欢迎使用堆栈溢出!听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行程序,并查看是否存在错误它偏离了您的预期。如果您要进行任何编程,这是一个必不可少的工具。进一步阅读:并且您没有使用
rech
0
的返回值总是返回的。请尝试
返回rech(…) @ JVAUEN C++大部分是C的超集,而大多数C的特点是“代码> Prtffrech
0
的e。请尝试
返回rech(…) @ JVAUEN C++主要是C的超集,而大多数C的特点是“代码> Prtffreturn rech(tab,n,i,r);