30/09/2018, 20:56

Chương trình bị treo khi tính tổng S = 1+1/2! + ... 1/n!

Mọi người cho e hỏi ạ? tính tổng s=1+1/2!+…+1/n! trong đó yêu cầu tính tổng 2016 là bao nhiêu , em làm cách này thì ra lỗi ạ (treo máy) , anh chị có cách nào khác để làm bài này được không ạ?

#include <stdio.h>
#include <conio.h>
int GT(int n)
{
	if (n == 1 || n == 0)
		return 1;
	else
		return n*GT(n - 1);
}
void main()
{
	int i;
	float s = 0;
	for (i = 0; i <= 2016; i++)
		s += 1.0 / GT(i);
	printf("
 s= %f", s);
	_getch();
}
Chi Ngo viết 23:03 ngày 30/09/2018
chingovan.blogspot.com

Python: Tìm giá trị của biểu thức Taylor.

taylor, maclaurin, loop, khai triển, xấp xỉ

Văn Dương viết 23:10 ngày 30/09/2018

Đệ quy hở ? 2016 hở ?
Dự là tràn stack @@.

Dùng cách khác không dùng đệ quy. Dùng vòng lặp chẳng hạn.


double FreeCalc(doublue n){
     double ret = 1;
     for(int i=1;i<=n;i++) ret*=i;
     return ret;
}
// gọi hàm này để tính
double Funtion(double lim){
    double ret=0;
    for(double i=1;i<=lim;i++)
        ret +=(1/FreeCalc(i));
    return ret;
}
Người bí ẩn viết 22:58 ngày 30/09/2018

Nếu bài này giải thích cách đệ quy thì bạn nên tạo thêm 1 hàm tính Giai thừa nữa. Tất cả phép toán thì hoàn thành trong hàm con luôn. Khi qua hàm main chỉ việc gọi tới hàm con thôi. Mà do phép Giai thừa có giới hạn nên khi quá nhiều sẽ bị tràn, không làm được. Bạn làm bài này được là ok rồi, không cần phải tính 2016 2017 … đâu

Người bí ẩn viết 23:09 ngày 30/09/2018

Tham khảo code của mình nhé! Do hơi bận xíu nên mình code nhanh, nên không đọc lại. Bạn xem chỗ nào sai thì sửa, không thì tham khảo cho biết

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <Windows.h>
int Factorial(int m);
float Power(int n);
int main()
{
    int n;
    printf("Nhap so n: ");
    while((scanf("%d",&n)) != EOF)
    {
        printf("Ketqua: %.3f\n",Power(n));
        printf("\nNhap so n: ");
    }
    getch();
    return 0;
}
int Factorial(int m)
{
    if (m == 0)
        return 1;
    return m*Factorial(m-1);
}
float Power(int n)
{
    if (n == 1)
        return 1;
    return (float)1/Factorial(n)+Power(n-1);
}
Khôi Trần viết 23:12 ngày 30/09/2018

Bĩnh tĩnh phân tích nào 2016! thì kiểu dữ liệu nào chịu cho nổi

Bé tập Code viết 22:56 ngày 30/09/2018

Số lớn quá không thể dùng biến để chứa giai thừa của nó được. Bạn phải tạo mảng, dùng các phần tử mảng để chứa các chữ số từ kết quả giai thừa sau đó ghép lại.

Bài liên quan
0