等差数列问题——递归与函数自调用算法
题目描述 Description
给定n(n>=1),用递归的方法计算1+2+3+4+...+(n-1)+n
输入输出格式 Input/output
输入格式:
一行,一个数n
输出格式:
一行,一个数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 }
我不怕千万人阻挡,只怕自己投降…