黑马程序员技术交流社区

标题: 利用递归函数完成作业--付上详尽注释 [打印本页]

作者: 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