A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

以下是小弟利用递归函数完成的一个作业题,一目了然字数不多,供大家参考,大神勿喷:
题目:
编写一个函数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循环来完成的,但是这个递归函数感觉更高大上点,就想能不能用递归来完成呢?
想了好久,就运用下这个写法和思路。
请大家多多见谅,给点辛苦分吧!

8 个回复

倒序浏览
我来学习学习
回复 使用道具 举报
#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:11
板凳
把求年龄那个也分析下呗~前个人比后个人大两岁那个~
回复 使用道具 举报
小弟好身手                                    
回复 使用道具 举报
还可以~~
回复 使用道具 举报
学习了:victory:
回复 使用道具 举报
大神啊  学习了
回复 使用道具 举报
递归函数是不是很占内存啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马