黑马程序员技术交流社区
标题: 利用递归函数完成作业--付上详尽注释 [打印本页]
作者: 382780396 时间: 2015-7-19 23:19
标题: 利用递归函数完成作业--付上详尽注释
以下是小弟利用递归函数完成的一个作业题,一目了然字数不多,供大家参考,大神勿喷:
题目:
编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n>=1)。
比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9
本人的思路和写法是:
int main(){
//解题思路:先计算出每个数字的阶乘,再把所有的阶乘加起来
//声明函数pieAdd
int pieAdd(int n);
//定义总数sum
int sum = 0;
//定义用户输入变量
int n = 0;
//提示用户输入
printf("请输入个整数(求出各个乘阶之和,比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9)\n"));
//接收数值
scanf("%d",&n);
//循环次数,如用户输入的n=5,就执行5次
for (int i=1; i<=n; i++) {
//sum总数:每次的乘阶都加给sum
sum +=pieAdd(i);
}
//最后打印
printf("乘阶之和是 %d",sum);
}
//运用递归函数:
int pieAdd(int n){
//这里的n是新定义的n,不等同于用户输入的n
if (n==1){
//当n=1时,开始回归迭代
return 1;
}
//返回值自己调用自己直到()小括号里运算完,(n-1)小括号里有明确数=1时值再*n回归。
return pieAdd(n-1)*n;
}
__________________________________________________________华___丽___的___分___割___线___________________________________________________
字数不多,相信大家很快就能看懂,之前也写过for循环来完成的,但是这个递归函数感觉更高大上点,就想能不能用递归来完成呢?
想了好久,就运用下这个写法和思路。
请大家多多见谅,给点辛苦分吧!
作者: h22977 时间: 2015-7-19 23:29
我来学习学习
作者: h22977 时间: 2015-7-19 23:37
#include <stdio.h>
int pieAdd(int n){
int jc=1,sum=0;
for (int i=1; i<=n; i++) {
jc *=i;
sum+=jc;
}
return sum;
}
int main(int argc, const char * argv[]) {
int a = pieAdd(5);
printf("%d",a);
return 0;
}
作者: wx_pNOonoEG 时间: 2015-7-19 23:46
把求年龄那个也分析下呗~前个人比后个人大两岁那个~
作者: strongfish 时间: 2015-7-20 13:35
小弟好身手
作者: 被水淹死的鱼 时间: 2015-7-20 15:02
还可以~~
作者: 黑马灬小胖纸 时间: 2015-7-20 21:46
学习了:victory:
作者: 糖糖本尊 时间: 2015-7-20 22:08
大神啊 学习了
作者: 哒哒萌 时间: 2015-7-20 22:13
递归函数是不是很占内存啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |