等差数列问题——递归与函数自调用算法

题目描述 Description

给定n(n>=1),用递归的方法计算1+2+3+4+...+(n-1)+n 

输入输出格式 Input/output
输入格式:
一行,一个数n
输出格式:
一行,结果
输入输出样例 Sample input/output
样例测试点#1
输入样例:
3
输出样例:
6
思路:
运行程序,当T=5时,输出结果:S=15,其递归调用执行过程是:(设T=3) 
递归调用过程,实质上是不断调用过程或函数的过程,由于递归调用一次,所有子程序的变量(局部变量、变参等)、地址在计算机内部都有用特殊的管理方法——栈(先进后出)来管理,一旦递归调用结束,计算机便开始根据栈中存储的地址返回各子程序变量的值,并进行相应操作。 
 
代码①如下(符合题意,用的是递归):
 1 #include <stdio.h>
 2 int fac(int n)
 3 {
 4     if(n==0) return 0;
 5     else 
 6     {
 7         return(fac(n-1)+n);//递归 
 8     }
 9 }
10 int main()
11 {
12     int n;
13     scanf("%d",&n);
14     printf("%d\n",fac(n));//调用函数 
15     return 0;
16 }

代码②如下(自己写的,没用递归,直接利用等差数列公式):

1 #include <stdio.h>
2 int main()
3 {
4     int n;
5     scanf("%d",&n);
6     printf("%d\n",((1+n)*n)/2);
7     return 0;
8 }

 

posted @ 2015-04-30 23:18  Memoryヾノ战心  阅读(507)  评论(0编辑  收藏  举报