从c ++ / c中的函数返回的问题
Posted
技术标签:
【中文标题】从c ++ / c中的函数返回的问题【英文标题】:problem with returning from function in c++/c 【发布时间】:2018-12-03 19:48:22 【问题描述】:我从函数返回时遇到了这个问题。 这是一个搜索函数,如果函数找到我给出的值,它应该返回 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;
【问题讨论】:
欢迎来到 Stack Overflow!听起来您可能需要学习如何使用调试器来逐步执行代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs 和 Debugging Guide 你没有使用rech
的返回值。 0
总是返回。试试return rech(...)
@JVApen C++ 主要是 C 的超集,大多数 C 功能(如 printf
)都可以正常工作。不要评判。
@MarkRansom 这里的普遍共识是选择一种语言。
将 C++ 视为 C 的超集让很多人感到非常悲痛。刚开始时最好将它们视为两种完全独立的语言。
【参考方案1】:
让我们一起来看看吧。
第一次调用 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 语句并将 0 返回给 main。
main 现在打印出一个 0 并且程序结束。
这是调试代码的过程。
要让程序将 1 返回给 main,您需要让它返回 rech 函数,否则递归调用什么也不做。
【讨论】:
【参考方案2】:当您使用return
时,您将返回到调用者,这在递归函数中大部分时间都意味着相同的函数。
改变
rech(tab,n,i,r);
到
return rech(tab,n,i,r);
【讨论】:
@minn 选择 cwbusacker 的答案,而不是我的。这是一个更好的答案,他比我更需要声誉。 :) 好的,我将其更改为 cwbusacker 的答案,再次感谢您的帮助;) 嘿@Broman 感谢您的帮助!我现在可以发表评论,感谢您为我的声誉牺牲! @cwbusacker 不用担心,毕竟你的回答更好。以上是关于从c ++ / c中的函数返回的问题的主要内容,如果未能解决你的问题,请参考以下文章