关于递归的问题

时间:2014-11-16 21:27:36

标签: c recursion

当我们遇到关于递归的问题时,我正在帮助一个朋友做一些他遇到麻烦的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");
}

2 个答案:

答案 0 :(得分:0)

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的所有数字求和。我希望它现在能更有建设性地发挥作用。

答案 1 :(得分:0)

最初我们有:总和(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。