【问题标题】:Questions about recursion [closed]关于递归的问题[关闭]
【发布时间】:2015-01-13 17:56:41
【问题描述】:

当我们遇到一个关于递归的问题时,我正在帮助一位朋友完成一些他遇到问题的 CS 工作。我自己编写了代码来测试它,但我仍然不太明白它在做什么。谁能解释一下?

#include <stdio.h>
#include <stdlib.h>

int sum(int a, int b)
{
if (a == b)
    return 0;
else
    return a + sum(a + 1, b);
}

int main()
{
    printf("%d\n", sum(3, 7));
    system("pause");
}

【问题讨论】:

  • 这个神秘的朋友星期天也给你做作业吗?
  • @EdHeal 今晚硬件太多了 :)
  • @EdHeal 对答案感到抱歉。只是机械地做了,并没有阅读问题的情节(((我完全同意你的观点。
  • 所以你在帮朋友做作业,你甚至不理解你写的那段代码?

标签: c recursion


【解决方案1】:

sum(a,b) 正在计算 a 和 b-1(包括)之间所有整数的和。即 sum(3,7) = 3+4+5+6

编辑:为什么会这样?因为当你调用带有参数 a 和 b 的函数时,你可以将调用分解如下:

sum(a, b)
a + sum(a+1, b)
a + (a+1) + sum(a+2, b)
a + (a+1) + (a+2) + ... + sum(b,b)

在这种情况下,由于 sum(b, b) 返回 0,您可以(直观地)看到该函数将 a 到 b-1 的所有数字相加。我希望它现在能更有建设性地帮助。

【讨论】:

  • 请不要为别人做功课——最终导致程序员不做他们的工作
  • @EdHeal,所以没有人帮助过你吗?我觉得这很难相信。
  • @Novaea 他应该向教授/助教寻求帮助,他们会知道要给予多少帮助,而不是直接回答
  • @Steve,我想知道。他明天要问教授。我想为自己的利益而学习。上帝保佑。
  • @EdHeal 真的是在浪费时间。每当你试图教育某人一些崇高的原则时,你将需要经历一些痛苦,甚至承担责任,被视为“邪恶”。这是设计使然。这就是我放弃的原因,因为如果你说服了某人,就会有 10 个人不知从何而来,摧毁我们崇高的事业。我想关闭并继续前进是明智的做法。
【解决方案2】:

最初我们有: 总和(3,4) 然后: 3+总和(4,7), 3+4+总和(5,7), 3+4+5+总和(6,7), 最后: 3+4+5+6+和(7,7)。

sum(7,7) 为 0,因此结果为: 18.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2014-08-14
    • 2015-07-08
    相关资源
    最近更新 更多