题目描述:用递归求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。
时间: 2023-11-09 15:00:45 浏览: 156
可以使用递归函数来求解Sn的值,具体实现如下:
```python
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
def sum_factorial(n):
if n == 1:
return 1
else:
return factorial(n) + sum_factorial(n-1)
n = 5
print(sum_factorial(n)) # 输出结果为 153
```
相关问题
任务描述 题目描述:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个给定数值
这道题可以使用循环结构和递归两种方法来解决。
1. 循环结构方法:
循环结构方法可以使用for循环或者while循环来实现。具体实现方法如下:
```c
#include <stdio.h>
int main()
{
int n, i;
long long sum = 0, factorial = 1;
printf("请输入一个正整数n:");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
factorial *= i; // 计算i的阶乘
sum += factorial; // 将i的阶乘加到sum中
}
printf("Sn的值为:%lld\n", sum);
return 0;
}
```
2. 递归方法:
递归方法可以使用一个函数来计算n的阶乘,然后在主函数中调用该函数来计算Sn的值。具体实现方法如下:
```c
#include <stdio.h>
long long factorial(int n)
{
if (n == 1)
return 1;
else
return n * factorial(n - 1); // 递归调用自身来计算n的阶乘
}
int main()
{
int n, i;
long long sum = 0;
printf("请输入一个正整数n:");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sum += factorial(i); // 将i的阶乘加到sum中
}
printf("Sn的值为:%lld\n", sum);
return 0;
}
```
以上两种方法都可以求出Sn的值,但是递归方法的效率较低,当n较大时,递归方法的计算时间会明显增加。
题目描述:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。
题目描述:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。
解题思路:
1.使用一层for循环,从低位到高位的累加,用sum保存,直至n。
2.使用递归函数计算每个数的阶乘,使用一个for循环计算阶乘数的累加,逐步累加每个数阶乘的结果到总结果中。
3.双层for循环,时间复杂度n*n,不建议使用。
参考代码:
//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;
}
阅读全文