环境:Linux Deepin 11.6,Emacs23.3

题目:求1~10的阶乘之和,即1!+ 2! +3!...+10!

这里介绍两种思路:一是循环结构,二是递归结构

一、For循环方式

代码文件:

main.c

#include <ctype.h>
#include <errno.h>
#include <stdio.h>

/*******************************
求1~10的阶乘和

基本功:For循环及嵌套使用

*****************************
*/

int main(int argc, char * argv[])
{
int result = 0;
result = cal(10);
printf("result : %d\n", result);


}

int cal(int max)
{
int m = 1;
int n = 1;
int sum = 1;
int all_sum = 0;

for (m = 1; m < max+1; m++) {

for (n = 1; n < m+1; n++) {
sum = sum * n;

}
// printf("sum = %d\n", sum);

all_sum = all_sum + sum;
sum = 1;

}
return all_sum;


}

顺便晒下我的Emacs编程界面

 

运行结果如下:

 

总结:只涉及一个For循环的嵌套使用,虽然简单,但基本功一天都不能丢!

 

二、递归思路

 

代码文件:

recursion.c

#include <stdio.h>
#include <stdlib.h>

/*******************************************************
用递归方式计算1~10的阶乘和

重点:理解递归思想方式

*****************************************************
*/
int res = 1;
int sum = 0;

int main(int argc, char * argv[])
{
int n = 10;
int r = sum_jiecheng(n);
// int r = jiecheng(n);

printf("%d的阶乘和是%d\n", n,r);

}

int jiecheng(int num)
{
// int res;

if(num<1)
{

return res;

}else
{
res = num * jiecheng(num-1);
}



}

int sum_jiecheng(int num)
{
res = 1;

if(num<1)
{
return sum;

}else
{

res = jiecheng(num);

sum = sum + res;

printf("%d的阶乘是%d\n", num,res);

sum_jiecheng(num-1);

}





}


运行结果:

小结:重点是理解递归思想的方法,此题目中包含了两个递归过程,一是阶乘的结果,10的阶乘是10×9的阶乘,即10的阶乘依赖于9的阶乘结果,9的阶乘依赖于8的阶乘结果,依次类推,最简单情况是1的阶乘,此递归过程结束。另一个递归是在于各阶乘之和,10的阶乘= 1~9的阶乘和,依次类推,最简单情况是到1的阶乘和,在此递归结束,注意把握这种思想方式,即可将复杂问题简单化。

  通过此题目也体现了循环和递归两种思想的运用,递归和循环两种思想的运用,用循环能解决的问题,用递归一定能实现,但用递归能实现的问题循环方式不一定能解决 。