求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。(递归和循环的方法)

题目要求:
1.求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。

一.格式要求:
输入:
n
输出:
Sn的值
样例输入:
5
样例输出:
153

解题思路:
1.循环方法解决:使用一层for循环,首先将每次需要的累加数保存S,从低位到高位的累加,用sum(注意使用long型或者long long)保存,直至n,注意终止条件是“<=n”;
2.递归的方法解决:使用递归函数计算每个数的阶乘,使用一个for循环计算阶乘数的累加,逐步累加每个数阶乘的结果到总结果中,其实和一层for循环差不多,但是个人感觉更喜欢递归,本题相对而言更加清楚易懂一些;
3.双层for循环,时间复杂度n*n,不建议使用;

注意事项:
1.使用双重循环,注意循环的出口,避免死循环;
2.注意递归出口,不可省略;
3.如果超出数值表示范围(该题阶乘和阶乘累加的结果均已超出int整型表示范围)需使用合适数据类型进行定义。

参考代码:

//for循环解决方法
#include<iostream>
using namespace std;
int main(){
    int n;
    long s=1,sum=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        s*=i;
        sum+=s;
    }
    cout<<sum;
    return 0;
 }

 
//递归的方法
#include "iostream"
using namespace std;
long fun(int n){
    if(n==1)
        return 1;
    else{
        return n*fun(n-1);
    }
}
int main(){
    int n;
    long sum=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        sum+=fun(i);
    }
    cout<<sum<<endl;
    return 0;
}
  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值