从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 &lt; n 还是0 &lt; 5?这是真的。 现在我们检查是tab[i] == r 还是1 == 2。这是错误的。 我们增加 i 并重新开始

我们第二次调用 rech: rech(tab = 1,2,3,4,5, n = 5, i = 1, r = 2)tab[i] &lt; r 还是1 &lt; 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中的函数返回的问题的主要内容,如果未能解决你的问题,请参考以下文章

从 C 中的函数返回 0?

从 C 中的函数返回多维数组

从C中的主函数返回与退出[重复]

从函数返回对象时调用C ++中的复制构造函数?

如何从c ++中的函数返回数组[重复]

从c ++中的函数返回数组向量[重复]