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

Đề tài: giải thích giùm 1 bài trên diễn đàn

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

    Mặc định giải thích giùm 1 bài trên diễn đàn

    em đọc trên diễn đàn mình có bài tập như sau :
    tính tổng s=1+1/2+1/3+....+1/n bằng hàm đệ quy

    một sư huynh làm như sau:
    Code:
    #include<stdio.h>
    #include<conio.h>
    int ketqua(int n)
    {
       if (n==1) return 1
       else 
       {
          float t = (float) 1/n;
          return t+ketqua(n-1);
       }
    }
    void main()
    -------chỗ này là gọi hàm và in kết quả
    em không hiểu ở chỗ float t = (float) 1/n;
    nếu em sửa ;
    float t = float (1/n);
    hay nguyên đoạn đó là
    float t;
    float 1/n;
    t=1/n;
    return t+ketqua(n-1);


    thì nó không ra đúng kết quả ... ví dụ nhập n=2 thì tổng =1
    Đã được chỉnh sửa lần cuối bởi cuocdoi : 08-11-2008 lúc 08:42 AM. Lý do: sai dấu

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Bạn phải hiểu phép ép kiểu của C . Ví dụ (float) 1/n tức là 1 được chuyển sang kiểu float rồi mới thực hiện phép chia . Còn như bạn viết float (1/n) tức là thực hiện phép chia trước (1/n) . Khi thực hiện phép chia đó C sẽ dùng phép ép kiểu tự động tức là nó đem 1/n -> chuyển kết quả sang kiểu int rồi sau đó nó mới thực hiện phép ép kiểu của bạn float() -> nếu n>1 thì 1/n=0 ->float(1/n)=0.0 .
    Code:
          float t = float(1/n);
    Câu lệnh trên tương đương với:
    Code:
          int temp=1/n;
          float t=float(temp);

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    theo mình thì bài này đệ quy như vầy đơn giản mà hay nhất:

    PHP Code:
    double tinh(int n)
        {
            if (
    n==1) return 1;
                else return 
    tinh(n-1) + 1.0/n;
        } 
    chúc bạn thành công
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

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

    Trích dẫn Nguyên bản được gửi bởi trung_dk070384 Xem bài viết
    Bạn phải hiểu phép ép kiểu của C . Ví dụ (float) 1/n tức là 1 được chuyển sang kiểu float rồi mới thực hiện phép chia . Còn như bạn viết float (1/n) tức là thực hiện phép chia trước (1/n) . Khi thực hiện phép chia đó C sẽ dùng phép ép kiểu tự động tức là nó đem 1/n -> chuyển kết quả sang kiểu int rồi sau đó nó mới thực hiện phép ép kiểu của bạn float() -> nếu n>1 thì 1/n=0 ->float(1/n)=0.0 .
    Code:
          float t = float(1/n);
    Câu lệnh trên tương đương với:
    Code:
          int temp=1/n;
          float t=float(temp);
    anh có thể nói rõ được hơn không , trên diễn đàn mình có bài viết nào nói về vấn đề này (nó tên là gì)không hả anh để em đọc tham khảo

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    anh có thể nói rõ được hơn không , trên diễn đàn mình có bài viết nào nói về vấn đề này (nó tên là gì)không hả anh để em đọc tham khảo
    đây là viết tắt cho đỡ phải cấp phát bộ nhớ thôi

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

  1. Mã nguồn C Lỗi bài tập xây dựng thuật toán trên danh sách liên kết kép bị lỗi bác nào sủa giùm em với
    Gửi bởi trongcktin13b3 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 28-03-2013, 09:23 PM
  2. Giải thích giùm mình cái đề này với
    Gửi bởi khachung_uit trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 22-11-2012, 10:21 AM
  3. vấn đề Background Worker trên C#. Các bạn chỉ giùm
    Gửi bởi vtsinh trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 30-03-2010, 09:44 AM
  4. Cách nhập một mảng trên C++, mong các bạn giải đáp giùm?
    Gửi bởi auduongca trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 10-05-2009, 02:16 PM
  5. ai kiểm tra lỗi bài đơn giản giùm em nha.
    Gửi bởi thanhle_uit trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 13-02-2009, 11:57 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