Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: làm đệ quy như thế này đúng yêu cầu không?

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    126

    Mặc định làm đệ quy như thế này đúng yêu cầu không?

    mình có bài tập là tính s(n)=1+1*2+...+1*2*...*n
    bài này yêu cầu làm băng đệ quy
    mình code thế này ko biết đúng yêu cầu không nữa
    tại vì trong bài này của mình lại dùng thêm 1 hàm for
    nếu sai các bạn xem hộ mình nha
    đây là code của mình
    Code:
    #include <stdio.h>
    #include <math.h>
    int giaithua(int i)
    {
    	if(i==1)
    		return 1;
    	else
    		return i*giaithua(i-1);
    }
    void main()
    {
    	int n,s=0;
    	printf("Nhap n: ");
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		s+=giaithua(i);
    	}
    	printf("ket qua la %d\n",s);
    }

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - Ý bạn là sao:là ko muốn dùng vòng lặp for nữa chứ jì.Thì mình làm thêm một cái hàm nữa...Xem ví dụ:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <math.h>
    4. long int giaithua(int k)
    5. {
    6.  if (k==0) return 1;
    7.  return giaithua(k-1)*k;
    8. }
    9. long int tonggiaithua(int n)
    10. {
    11.  if (n==1) return 1;
    12.  return tonggiaithua(n-1)+giaithua(n);
    13. }
    14. void main()
    15. {
    16.  int n;
    17.  clrscr();
    18.  printf("Nhap mot so n ");scanf("%d",&n);
    19.  printf("Ket qua la %ld ",tonggiaithua(n));
    20.  getch();
    21. }
    No way, No success..

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    HÌ bạn siêu hacker viết thế cũng ok nhưng không tối ưu lắm.

    Kid có ý như thế này :
    PHP Code:
    long int r 1;
     
    long int tonggiaithua(int i,int n)
     {
        if(
    n);
           return;
        
    += r*i;
        
    tonggiaithua(i+1,n);
     } 
    Coi thử có tối ưu hơn được chút nào không ?

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    126

    uhm cách của bạn hay lắm
    thank hai bạn nha

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Nhưng cậu phải kiểm tra lại cho kĩ chứ giai thừa thì số lớn lắm. Nếu mà người ta được n = 1000 thì die đấy. Mình cũng ko rành mấy chuyện xử lí số lớn số nhỏ này, diễn đàn có bài tính giai thừa 1000 đấy, search thử ?

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    30

    Mặc định làm đệ quy như thế này đúng yêu cầu không?

    Bạn thử đoạn code của mình xem sao có được không nha!
    Code:
    unsigned long SumFactorial (int n)
    {
    	if (n <= 0) return 0;
    	if (n == 1) return 1;
    	return ((n + 1) * SumFactorial(n - 1) - n * SumFactorial(n - 2));
    }
    Chúc bạn may mắn!

Các đề tài tương tự

  1. Sử dụng máy in như thế nào là đúng cách
    Gửi bởi thongthanhhungland trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 15-11-2011, 01:46 PM
  2. Học lập trình như thế nào cho đúng!
    Gửi bởi makiemlong trong diễn đàn Đào tạo CNTT
    Trả lời: 10
    Bài viết cuối: 18-04-2011, 07:39 PM
  3. Ép kiểu thế nào là đúng?
    Gửi bởi alethinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 24-05-2010, 11:55 PM
  4. Hiểu thế nào cho đúng câu lệnh sau?
    Gửi bởi egr trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 20-08-2009, 08:07 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn