6-1 使用递归函数计算1到n之和(5 分)
本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。
函数接口定义:
int sum( int n );
该函数对于传入的正整数n
返回1+2+3+…+n
的和;若n
不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。
裁判测试程序样例:
#include <stdio.h>
int sum( int n );
int main()
{
int n;
scanf("%d", &n);
printf ("%d\n", sum(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
10
输出样例1:
55
输入样例2:
0
输出样例2:
0
C语言代码
int sum( int n )
{
int s=0;//定义返回值,s初始值是0,因为之后要进行求和。
if(n>0)//控制递归次数
s=n+sum(n-1);//进行函数调用
return s;
}
分析:递归通常是一种方法,也是一种函数及其调用方法的总称,这种函数可以自己调用并使用自己,这种函数被称为递归函数,这种方法被称为递归。以此题为例,要进行从1到n的和,循环的方法是直接进行相加,这个从逻辑上很好理解,而递归则比较麻烦,递归可以理解为把一个问题无限次微分得到的累加效果。这里在求和时,函数会进行很多层的自身调用,每一层调用都是调用这个函数结构,若条件不满足,就会持续调用,直到条件不满足时,最后调用的函数返回一个值,调用完成,第一层函数返回值。
从逻辑上分析,这个实际上是用反复调用的方法写出来1+2+3+...+n,每一个sum(a)都相当于留下了一个a和另一个sum(a-1),而sum(a-1)又具有同样的作用,直到条件不满足,函数进行一个不一样的语句,不再自身调用自身,这里就是递归调用的终点,同时所模拟的式子构造完成,进行值的返回。