解题思路:

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

                思路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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论