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

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2018-07-22 14:21:03 2004 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

回答

页面替换的算法有哪些?

2022-11-15 10:48:43 47浏览量 回答数 1

3

回答

写出求解1+2+3+.........+n的迭代算法和递归算法

2018-07-22 16:33:38 2771浏览量 回答数 3

1

回答

二分法的递归算法的时间复杂度是O(n^2)么?

2018-07-22 14:59:59 1844浏览量 回答数 1

1

回答

递归算法的实现

2018-07-19 19:48:32 1041浏览量 回答数 1

2

回答

列数规则如下 1.1.2.3.5.8.13.21.....求第60位数是多少,用递归算法实现

2018-07-20 10:11:11 2255浏览量 回答数 2

1

回答

递归算法 怎么判断递归体和递归头

2018-07-18 20:41:23 1330浏览量 回答数 1

1

回答

递归算法 怎么判断递归体和递归头

2018-07-18 16:02:01 1485浏览量 回答数 1

2

回答

c++递归算法

2018-07-20 14:39:25 2769浏览量 回答数 2

1

回答

汉诺塔递归算法

2018-07-15 19:47:20 1138浏览量 回答数 1

1

回答

用递归算法计算斐波拉契级数数列中第n项的值,1、1、2、3、5、8、13、21、

2018-07-17 20:25:48 1796浏览量 回答数 1
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载