StarHui


私信TA

用户名:uq_15565483691

访问量:3939

签 名:

只要你想,世界就会出现奇迹!

等  级
排  名 326
经  验 5422
参赛次数 2
文章发表 25
年  龄 18
在职情况 学生
学  校 西安汽车职业大学
专  业 人工智能

  自我简介:

大一新生一枚 一起学习交流,请加V:StarHui0415 个人公众号:阿辉的大本营 公众号会每天更新一道算法题!!!

TA的其他文章

解题思路:

                这个题出的非常好,既可以用迭代法来求阶乘和,又可以使用函数递归来求,妙极了。

                思路1(迭代法):巧妙的利用for循环来遍历1--N中间的数,再定义两个变量,一个来存放这个数的阶乘res *= i;另一个存放阶乘和

                思路2(递归法):当遍历的数(i)作为参数传入recursion函数,i >= 2时,就返回recursion(i - 1) * i,否则,返回1
注意事项:

                题目要求N <= 20.要知道20的阶乘是非常大的,必须注意数据类型,定义为long long int型,这样才能存放下

参考代码:

1、迭代法

#include <stdio.h>
int main()
{
    int N,i;
    scanf("%d",&N);
    long long int res = 1,sum = 0;//避免数据过大,导致程序错误
    for(i = 1;i <= N;i++)
    {
        res *= i;//计算遍历数的阶乘
        sum += res;//来求阶乘和
    }
    printf("%d",sum);
    return 0;
}

2、递归法

#include <stdio.h>
long long int recursion(int x)
{
    if(x < 2)//如果x小于2.返回1
        return 1;
    else// x >= 2返回前一个数的阶乘,再乘以这个数本身
        return recursion(x - 1) * x;
}
int main()
{
    int N,i;
    scanf("%d",&N);
    long long int sum = 0;
    for(i = 1;i <= N;i++)
    {
        sum += recursion(i);//先遍历一下把1到N之间的数作为参数传进去,然后累加,即可得到阶乘和
    }
    printf("%lld",sum);
    return 0;
}


 

0.0分

1 人评分

  评论区

  • «
  • »