【问题标题】:I'm not getting any output in recursive function我在递归函数中没有得到任何输出
【发布时间】:2021-12-10 03:37:29
【问题描述】:

//这是一个递归函数,用于在C语言中求数字的总和 //我的 IDE 中没有任何输出。

int dsum(int n)
{
    int a, r;
    r = n % 10;
    a = r + dsum(n / 10);
    return a;
}
int main()
{
    int a;
    a= dsum(12345);
    printf("%d",a);
    return 0;
}

【问题讨论】:

  • 每次你输入dsum(),你都会永远地递归。该功能无法终止。可以加if (n == 0) return 0;ideone.com/I3bJ9J
  • 你最终可能会遇到堆栈溢出。
  • 使用pmg的提示。同时初始化你的a 并确保你刷新输出。对于未来的问题,请研究并应用制作minimal reproducible example 的概念。 `` 错字表示您还没有完全理解它。

标签: c recursion


【解决方案1】:

递归函数应该总是有一个基本情况作为最终返回,在这种情况下,当 n 等于 0 时,这意味着所有数字都相加(当 msb 数字除以 10 时,结果为 0)。 然后你会得到返回,它将使用当前 lsb 数字(或最右边的数字)的结果调用函数 + 输入为 n/10 的函数的结果

int dsum(int n)
{
    if (n == 0) {
        return 0;
    }
    return n % 10 + dsum(n / 10);
}

int main()
{
    int a;
    a = dsum(12345);
    printf("%d",a);
    return 0;
}

顺便说一句,我还建议研究尾递归: https://en.wikipedia.org/wiki/Tail_call

在这种情况下,它可能看起来像这样:

int dsum_tail_recursion(int n, int sum)
{
    if (n == 0) {
        return sum;
    }
    return dsum_tail_recursion(n/10, n%10 + sum)
}

int main()
{
    int a;
    a = dsum_tail_recursion(12345, 0); // 0 is the sum start value
    printf("%d",a);
    return 0;
}

【讨论】:

  • 虽然此代码可能会解决问题,但 including an explanation 关于如何以及为何解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的答案添加解释并说明适用的限制和假设。
  • 谢谢!现在它的工作我不敢相信我错过了基础部分
  • 很高兴能帮上忙!
猜你喜欢
  • 2021-05-17
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多