【问题标题】:problem with returning from function in c++/c从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 programsDebugging Guide
  • 你没有使用rech的返回值。 0 总是返回。试试return rech(...)
  • @JVApen C++ 主要是 C 的超集,大多数 C 功能(如 printf)都可以正常工作。不要评判。
  • @MarkRansom 这里的普遍共识是选择一种语言。
  • 将 C++ 视为 C 的超集让很多人感到非常悲痛。刚开始时最好将它们视为两种完全独立的语言。

标签: c++ c arrays function


【解决方案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 不用担心,毕竟你的回答更好。
    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2020-06-21
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    相关资源
    最近更新 更多