【例10-6】编写一个递归函数sum(int n),完成计算1+2+3+...+n。
【分析】
设计递归计算法是面试题中常见的一类问题。传统的计算累加求和的问题多用循环实现,但这里要使用递归方法。其实可以将题目中这个计算求和的函数sum()定义为递归函数如下:
这是因为sum(n)表示计算1+2+3+...n的和。当n等于1时,很显然sum(n)等于1,当n大于1时,1+2+3+...+n的和等于n+(1+2+3+...+n-1)的和,而1+2+3+...+n-1的和可用sum(n-1)表示,因此构成了递归结构。
这样就可以方便地设计出sum的递归算法。
int sum(int n)
{
if(n==1) return 1;
else return n+sum(n-1);
}
下面给出完整的测试程序,程序清单10-6
#include "stdio.h"
int sum(int n)
{
if(n==1) return 1;
else return n+sum(n-1);
}
main()
{
int n;
printf("Please input a integer for counting 1+2+...+n\n");
scanf("%d",&n);
printf("The result of 1+2+...+%d is\n%d",n,sum(n));
getche();
}
本程序运行结果如下图所示