1!+2!+。。。+20!用递归算法怎么写啊-问答-阿里云开发者社区-阿里云

开发者社区> 知与谁同> 正文

1!+2!+。。。+20!用递归算法怎么写啊

2018-07-22 14:21:03 1573 4
1!+2!+。。。+20!用递归算法怎么写啊
取消 提交回答
全部回答(4)
  • 祁同伟
    2019-07-17 22:54:35
    用C语言写的
    # include<stdio.h>
    int fac(int n)
    {
    long y;
    if (n == 0 || n == 1)
    y = 1;
    else
    y = n*fac(n-1);
    return y;
    }
    main()
    {
    int i = 1, n;
    long sum = 0;
    printf("input n:\n");
    scanf("%d", &n);
    for (; i <= n; i++)
    sum = sum+fac(i);
    printf("%ld\n", sum);
    }
    0 0
  • 我是管理员
    2019-07-17 22:54:35
    如果这题只能用c语言还要递归,不好办哦

    至今没看到这个题用c语言写对的
    0 0
  • 寒凝雪
    2019-07-17 22:54:35
    /* 计算前N项大数阶乘和的递归实现 */
    /* 大数用一般整型存储会造成数据溢出,产生错误,需用数组保存 */
    #include <stdio.h>
    #include <string.h>

    // 计算大数的阶乘
    void fac(int b, char *result) {
    if (1 == b) return;

    char *p = result;
    int t, m=0;
    while(*p) {
    t = (*p - '0') * b + m;
    *p++ = t % 10 + '0';
    m = t / 10;
    }
    while (m) {
    *p++ = m % 10 + '0';
    m /= 10;
    }
    *p = '\0';
    fac(b-1, result);
    }

    // 大数求和
    void big_sum(char *sum, char *num) {
    int m = 0, t = 0;
    while (*sum && *num) {
    t = *sum + *num - 2 * '0' + m;
    *sum = t % 10 + '0';
    m = t / 10;
    ++sum; ++num;
    }
    char *p = *sum > *num ? sum : NULL, *q = sum;
    if (!p) while(*sum++ = *num++);

    p = q;
    while (*p) {
    t = *p - '0' + m;
    *p++ = t % 10 + '0';
    m = t / 10;
    }

    while (m) {
    *p++ = m % 10 + '0';
    m /= 10;
    }
    *p = '\0';
    }

    // 初始化保存结果的数组
    void Init_R(char *result) {
    int i = 0;
    while (*result)
    *result++ = (i++ == 0) ? '1' : 0;
    }

    const int SIZE = 20; // 前n项的大小
    const int MAXSIZE = 1000; // 最大阶乘结果位
    const int INC = MAXSIZE / 10; // 求和结果位增量
    int main()
    {
    char r[MAXSIZE] = {'1'};
    char sum[MAXSIZE + INC] = { 0 };

    // 计算前N项阶乘和
    for (int i = 1; i <= SIZE; ++i) {
    fac(i, r);
    big_sum(sum, r);
    Init_R(r);
    }

    // 打印字符串"1+2+...+n="
    for (int i = 1; i <= SIZE; ++i)
    printf("%s%d!", i == 1 ? "" : "+", i);
    printf("=\n");

    // 逆序从高位开始输出最后求和结果
    int index = strlen(sum);
    while (index--)
    printf("%c", sum[index]);
    printf("\n");

    return 0;
    }
    0 0
  • 晚来风急
    2019-07-17 22:54:35
    public class Test {
    public static void main(String[] args) {
    int sum=0;
    for (int i = 1; i <= 20; i++) {
    sum+=fac(i);
    }
    System.out.println(sum);
    }
    public static int fac(int n){
    if (n==1) {
    return 1;
    }else {
    return n*(n-1);
    }
    }
    }
    0 0
添加回答
相关问答

1

回答

如何构建机器学习算法?

问问小秘 2020-04-15 14:07:23 35400浏览量 回答数 1

25

回答

云服务器网站没有被百度和google收录或者收录少怎么办?

qilu 2014-05-20 18:13:19 29944浏览量 回答数 25

38

回答

干货分享:DBA专家门诊一期:索引与sql优化问题汇总

xiaofanqie 2014-12-25 15:13:38 91772浏览量 回答数 38

9

回答

换个角度理解正则表达式

jagen 2014-07-23 14:00:21 25078浏览量 回答数 9

37

回答

阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载

管理贝贝 2017-02-10 15:14:36 74955浏览量 回答数 37

13

回答

【阿里云产品公测】开放搜索服务之 智能聊天实现

啊里新人 2014-10-21 10:41:20 33514浏览量 回答数 13

6

回答

弹性计算。。

d1004 2011-11-23 14:35:13 24554浏览量 回答数 6

26

回答

云数据库OceanBase的架构演进【精品问答集锦】

管理贝贝 2016-09-02 16:57:42 44050浏览量 回答数 26

24

回答

比赛_快速入门_4_19_update_仅供参考,思维不要受局限

小斯never 2015-03-22 18:22:43 33073浏览量 回答数 24

5

回答

C语言算法 【精品问答合集】

我是管理员 2018-07-13 15:51:28 26904浏览量 回答数 5
+关注
10077
文章
2994
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载