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

Đề tài: Giải biểu thức không dùng đệ quy

  1. #1
    Ngày gia nhập
    01 2013
    Bài viết
    5

    Mặc định Giải biểu thức không dùng đệ quy

    C Code:
    1. f(0) = 3
    2. f(1) = 4
    3. f(2) = 5
    4. f(n) = 3*f(n-1) + 4*f(n-2) + 5*f(n-3) với n>=3
    Viết hàm không đệ quy để tính giá trị của f.

    Mọi người có ý tưởng gì không ?

  2. #2
    Ngày gia nhập
    01 2013
    Bài viết
    1,479

    O(1) mem phải ko bạn
    a: queue;
    Đầu tiên: a.enqueue(f0); a.enqueue(f1); a.enqueue(f2);
    Sau đó lặp: f[j] = a.eval(); a.enqueue(f[j]); t = a.dequeue();

    Tương tự cho các hàm eval f[m] = eval(f[n-1], f[n-2],..., f[n-m]]) m>=2, O(m) mem.
    Đã được chỉnh sửa lần cuối bởi prog10 : 15-06-2015 lúc 09:05 AM.

  3. #3
    Ngày gia nhập
    01 2013
    Bài viết
    5

    mặc dù không hiểu lắm nhưng cũng thanks bạn

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

    @prog10: Làm đâu rồi em ?
    @wolffang93:
    Để tính n cần tính 3 đứa kế cận nên mình nghĩ thế này:
    int[n] f; // chứa dữ liệu f(n)
    f[0] = 3; f[1] = 4; f[2] = 5; // khởi tạo f(0), f(1), f(2)

    for(int i = 3; i <= n; ++i){
    f[i] = 3*f[i-1] + 4*f[i-2] + 5*f[i-3];
    }

    vậy là bạn có f[n] rồi nhé.

  5. #5
    Ngày gia nhập
    03 2015
    Bài viết
    0

    Mình sẽ dùng 1 mảng 1 chiều f gồm có 4 phần tử chứa f(n-3), f(n-2), f(n-1), f(n) lần lượt là f[0],f[1],f[2],f[3].
    Khởi tạo giá trị biến đếm i=3 finh f(3); f[0]=3; f[1]=4; f[2]=5; f[3]=5*f[0]+4*f[1]+3*f[2];
    Tiếp theo gán f[0]=f[1], f[1]=f[2], f[2]=f[3]. Tăng giá trị i++; Tính f[3]=5*f[0]+4*f[1]+3*f[2];
    Tiếp tục lặp lại bước trên trong khi i<n;
    Code:
    #include <stdio.h>
    #include <conio.h>
    int main ()
    {
        int i,n,f[4];
        printf(" Nhap n= "); scanf("%d",&n);
        i=3; f[0]=3;f[1]=4;f[2]=5; f[3]=5*f[0]+4*f[1]+3*f[2];
        while (i<n)
        {
              i++;
              f[0]=f[1]; f[1]=f[2]; f[2]=f[3];f[3]=5*f[0]+4*f[1]+3*f[2];
              }
        printf("\n Gia tri f(%d)=%d",n,f[3]);
        getch();
    }
    Cảm ơn bài viết hay và có ý nghĩa cũng là nét văn hóa

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