Trang 1 / 3 123 LastLast
Hiển thị kết quả từ 1 đến 10 / 24
  1. #1
    Tham gia
    30-08-2007
    Bài viết
    8
    Like
    0
    Thanked 0 Times in 0 Posts

    Giúp em phần này với!

    Đây là chương trình tính giai thừa của 1 số:

    Program Tinh_gt;
    uses crt;
    var n:integer;

    function gt(m:integer):integer;
    begin
    if m=0 then gt:=1 else gt:=m*gt(m-1);
    end;

    begin
    clrscr;
    write('tinh giai thua cua n = '); readln(n);
    write('ket qua = ',gt(n));
    readln
    end.
    VD nhập số 5 => KQ = 5 * 4 *3 * 2 *1 = 120.

    Nhưng em ko hiểu ở phần trong chương trình trên "gt:=m*gt(m-1)"
    Giải thích giúp em nguyên lý hoạt động của phần "gt:=m*gt(m-1)" làm thế nào mà có thể tính được giai thừa của 1 số.
    Quote Quote

  2. #2
    Tham gia
    25-09-2006
    Bài viết
    533
    Like
    0
    Thanked 1 Time in 1 Post
    gt=1 là phần NEO
    khi n>0 thì PC tính gt(n-1)
    muốn tính gt(n-1) thtì máy lại đi tính gt(n-2).
    tuong tu .........PC tính gt(n-n)=gt(0) mà thep phần NEO tg(0)=1
    lúc này máy làm thao tác sao chép ngược(giống Stack) {lấy lại các giá trị nhớ trơớc đó m*gt(m-1) thì giá trị nhớ là m,...........}

  3. #3
    Tham gia
    11-07-2007
    Bài viết
    42
    Like
    0
    Thanked 2 Times in 2 Posts
    Cái này người ta gọi là đệ quy( đơn giản là thủ tục gọi lại chính nó)
    m!=1.2.3...m=m*(m-1)!
    muốn tinh m! thì phải tính (m-1)! cứ lại lại mãi cho đến khi m=0 là điểm dừng của đệ quy còn không có điển dừng thì nó tràn stack. Đơn giản thế thôi.

  4. #4
    Tham gia
    16-02-2007
    Location
    TP:HCM
    Bài viết
    306
    Like
    1
    Thanked 0 Times in 0 Posts
    Với cách này thì chỉ có thể tính với số nhò thôi. N = 50 là die. Mình dùng mảng, chương trình nhỏ gọn và tính 10000 giai thừa trong vòng 1s

  5. #5
    Tham gia
    25-03-2008
    Bài viết
    22
    Like
    0
    Thanked 6 Times in 4 Posts
    Quote Được gửi bởi langtusitinh225 View Post
    Với cách này thì chỉ có thể tính với số nhò thôi. N = 50 là die. Mình dùng mảng, chương trình nhỏ gọn và tính 10000 giai thừa trong vòng 1s
    Bạn có thể viết chương trinh tính giai thừa của bạn ra được không ?

  6. #6
    Tham gia
    16-05-2006
    Location
    HCM
    Bài viết
    260
    Like
    0
    Thanked 0 Times in 0 Posts
    @chopes: Tính giai thừa thôi, cần gì phải "đao to búa lớn" thế. Nhưng nếu bạn đang nghiên cứu đệ quy thì code trên là một vd đấy.

    Với cách này thì chỉ có thể tính với số nhò thôi. N = 50 là die. Mình dùng mảng, chương trình nhỏ gọn và tính 10000 giai thừa trong vòng 1s
    Dùng mảng chi vậy bạn? 2 biến là đủ rồi. Vấn đề đáng quan tâm là khả năng tính toán số lớn thôi. Nhưng nếu bạn có thể làm được như bạn nói thì gửi code lên cho mình học hỏi với.

  7. #7
    Tham gia
    25-03-2008
    Bài viết
    27
    Like
    0
    Thanked 0 Times in 0 Posts
    Nếu bạn muốn tính giai thừa với số lớn như 10000 thì bạn phải viết function tính phép cộng bằng mảng, sau đó từ phép cộng viết function nhân, rồi đến giai thừa. Lúc đó bạn tính được cả 15000! chính xác đến từng chữ số.

  8. #8
    Tham gia
    19-06-2008
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts

    Nói nhỏ nè !

    Quote Được gửi bởi PKMinh View Post
    Nếu bạn muốn tính giai thừa với số lớn như 10000 thì bạn phải viết function tính phép cộng bằng mảng, sau đó từ phép cộng viết function nhân, rồi đến giai thừa. Lúc đó bạn tính được cả 15000! chính xác đến từng chữ số.
    Sau thấy ai cũng nói không vậy sau không thấy u nào post một bài cho bà con tham khảo thử nói thì ai mà chẳng nói được, cảm ơn các u nhiều.

  9. #9
    Tham gia
    04-11-2007
    Location
    ...
    Bài viết
    1,239
    Like
    0
    Thanked 7 Times in 7 Posts
    ek , thì đặc thù của mảng mà. Nói dễ hơn làm nhiều lắm ....^^

  10. #10
    Tham gia
    27-05-2008
    Location
    bình định
    Bài viết
    692
    Like
    0
    Thanked 10 Times in 6 Posts
    làm 2 biến là ok rồi , mình mới đọc đệ qui thôi ,đây là một ví dụ dễ hiểu về đệ qui ,chứ theo mình , những bài có tính lặp thì không nên dùng đệ qui

Trang 1 / 3 123 LastLast

Bookmarks

Quy định

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