Làm thế nào để tính được giai thừa bằng 0 và kết hợp với biểu thức?

Mọi người giúp với ạ mình suy nghĩ mãi ko ra

#include<stdio.h>
#include<math.h>
void nhap(int &n, float &x) 
{ 	
	printf("nhap vao mot so nguyen n: ");
	scanf("%d",&n);
	printf("nhap vao mot so thuc: "); 	 
	scanf("%f",&x); 
}
void tinh(int n, float x)
{
	float h=0, s=1;
	int i, j; 
	for(i=1; i<=2 * n; i++)
	{ 
		s=s * i; 
		for(j=0; j<=n; j++ ) 
			h=h+(pow(-1,j)*(pow(x,2*j)/s)); 
        } 
	printf("kp = %f\n",s); 
	printf("kp = %f\n",h); }

main()
{
	int n;
	float x; 
	nhap(n,x);
	tinh(n,x);
}

Chắc bạn cũng thấy 4! = 4*3*(2!)
6! = 6*5*(4!).
Tính các giai thừa sau trong tổng S thì có thể tận dụng giai thừa trước.
Vậy sẽ làm 1 biến factorial khởi tạo unsigned int fac = 1
Biến tổng S khởi tạo double s = 1 (mình dùng double vì độ chính xác cao)
Biến phụ k = 1 hoặc -1 để thay thế (-1)^n
Vì 0! = 1, trường hợp này dễ tính nên mình giả định n ∈ {1, 2, 3…}
Tổng này là tổng của i chạy từ 1 đến n, không phải đến 2n.
Hàm tính sẽ như sau:

void tinh(unsigned int n, double x)
{
	unsigned int fac = 1;
	double s = 1.0;
	int k = 1;
	for (unsigned int i = 1; i <= n; i++)
	{
		k = k * (-1);
		fac = fac * 2 * i*(2 * i - 1);
		s = s + k*(pow(x, 2 * i)/fac);
	}
	printf("kp = %lf\n", s);
}

n = 0, 0! = 1 chắc bạn tự làm được.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?