环境: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的阶乘和,在此递归结束,注意把握这种思想方式,即可将复杂问题简单化。
通过此题目也体现了循环和递归两种思想的运用,递归和循环两种思想的运用,用循环能解决的问题,用递归一定能实现,但用递归能实现的问题循环方式不一定能解决 。