求1/1!-1/3!+1/5!-1/7!+…+(-1)^(n+1) / (2n-1)!
方法一:
找到 第i项式与第i项式分母之间的关系,第一次循环控制 项式数,嵌套循环控制第i项式累乘,利用第i项式与第i项式分母之间的关系,使用第一次循环控制子循环的分母
此方法 复杂度 O(n^2)
#include<stdio.h>
#include<windows.h>
#pragma warning (disable : 4996)
int main(){
int n = 0;
scanf("%d", &n);
int flag = 1;
float denom ;
int i = 1 ;
float sum = 0;
for (i; i <= n; i++){ // 1、 n 为 对n个该累加式进行 累加
denom = 1.0;
int j = 1;
// 2、 找出第 i 个 累乘式子 与式子分母之间的关系 即 i 对应 2 * i - 1
for (j; j <= 2 * i - 1; j++){
// 通过项数与分母之间的关系,求出 对分母累乘的结果
denom *= j;
}
sum += flag / denom; // 救出前 i 项式子的和,直到 i = 2 * n - 1
flag = -flag; // 求出第 i 项式的符号
}
printf("%f", sum);
system("pause");
return 0;
}
方法二:
找到 第i项式与第i+1项式分母之间的关系 ,
第i项是i的阶乘 ,第i+1项是 i的阶乘 再乘以 ( i + 1 ) * ( i + 2 )
即 第i项 (2*i-1)! 第i+1项 (2*i-1)! *(2*i-2)*( 2 * i- 1)
此方法 复杂度 O(n)
#include<stdio.h>
#include<windows.h>
#pragma warning (disable : 4996)
int main(){
int n = 0;
scanf("%d", &n);
int sign = 1;
float denom =1.0;
int i = 2 ;
float sum = 0;
if (1 == n ){ // 当 n为1 时,sum =1;
sum = 1;
printf("%f", sum);
}
else if (n > 1){
for (i; i <= n; i++){
sign = -sign;
// 从第二项起,在原有阶乘的基础上在往后乘两个数
denom *= (2 * i - 2)*(2 * i - 1); /
sum += sign / denom;
}
sum = sum+1; // 加上第一项的值为1;
printf("%f", sum);
}
else{
printf("错误!!!");
}
system("pause");
return 0;
}