C++ 从c+中的函数返回时出现问题+/C
我在从函数返回时遇到这个问题。 这是一个搜索函数,如果函数找到了我给出的值,它应该返回1,但不是,它返回的是0而不是1。(对不起,我的英语不好。)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)
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);