Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7

Chủ đề: Đệ quy phi tuyến

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    chạy debug đi bạn ơi.
    có gì gặp vấn đề nếu chưa hiểu thì đưa lên đây, mọi người trả lời cho.
    theo mình chạy debug là cách tốt nhất để học lập trình. bạn sẽ thấy rõ nó chạy ra sao luôn.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi fire_dragon14988
    Mã:
    long TinhXn (int n)
    {
         if(n==0)
                return 1;
         long s = 0;
         for (int i=1; i<=n; i++)
              s = s + i * i * TinhXn(n-i);
         return s;
    }
    vd n=3. Có bạn nào giải thích giúp mình cách hoạt động của hàm TinhXn với?
    với: Xo = 1; Xn = n*n*Xo + (n-1)*(n-1)*X1 +...+ 1*1*X(n-1).
    Trích dẫn Gửi bởi zkday2686
    chạy debug đi bạn ơi.
    có gì gặp vấn đề nếu chưa hiểu thì đưa lên đây, mọi người trả lời cho.
    theo mình chạy debug là cách tốt nhất để học lập trình. bạn sẽ thấy rõ nó chạy ra sao luôn.
    mới học C làm gì đã biết debug ???

    đây là đệ quy phi tuyến

    mẫu chung của 1 đệ quy phi tuyến :
    Mã nguồn PHP:
    void ten(...) { for (i=1;i<=n;i++) { //lam 1 viec gi do if <dieu kien dung> { //lam 1 viec gi do } else { goi de quy } } }  
    để hiểu vấn đề hoạt động bạn nên tìm hiểu nguyên tắc làm việc của đệ quy trước.

    Mình chỉ muốn góp ý : đệ quy phi tuyến là 1 phương pháp hay nhưng lại là 1 giải pháp tồi.

    Đệ quy nói chung là 1 phương pháp giải bài tập hay nhưng trên khía cạnh chương trình thì là 1 giải pháp tồi .
    Hay : lời giải rút gọn và dễ hiểu
    Tồi : Nhược điểm của đệ quy : dễ bùng nổ bộ nhớ tạm thời gây ra over head ........và dễ gây ra lỗi do điều kiện chủ chốt.
    Ct đệ quy chạy ko tối ưu về bộ nhớ .


    trở về bài toán :

    Mã nguồn PHP:
    s = s + i * i * TinhXn(n-i);  
    khi gặp dòng này nó sẽ tạm dừng công việc hiện tại lại và xử lý : TinhXn(n-i);
    trước .
    Trong tinhxn(n-i) lại có tinhxn(..) nên nó lại tạm dừng công việc tại đó và tính cái tinhxn() trước cái bên trên.

    ok????

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    void Nhap(int a[], int n)
    {
        if(n==0)      return; //lệnh return này sẽ trả về giá trị cho hàm là gì vậy?
        Nhap(a, n-1);
        printf("Nhap phan tu cho mang: ");
        scanf("%d",&a[n-1]);
    }

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi fire_dragon14988
    Mã:
    void Nhap(int a[], int n)
    {
        if(n==0)      return; //lệnh return này sẽ trả về giá trị cho hàm là gì vậy?
        Nhap(a, n-1);
        printf("Nhap phan tu cho mang: ");
        scanf("%d",&a[n-1]);
    }
    hàm này là hàm void nên return không có trả trị gì hết. Đơn giản là nó quay về hàm gọi nó trước đó.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi fire_dragon14988
    Mã:
    void Nhap(int a[], int n)
    {
        if(n==0)      return; //lệnh return này sẽ trả về giá trị cho hàm là gì vậy?
        Nhap(a, n-1);
        printf("Nhap phan tu cho mang: ");
        scanf("%d",&a[n-1]);
    }
    ý lệnh của lệnh return là trả về giá trị đứng sau nó và thoát khỏi hàm. Ở đây nếu n==0 nó sẽ thoát khỏi hàm do đó sẽ dẫn đến việc kết thúc đệ quy.

    bài này là đệ quy tuyến tính.

    Để hay hơn nên chuyển điều kiện dừng là :
    if (n<=0 )...
    tại sao vậy : ?????

    để chẳng may do 1 lỗi nào đó ( quá trình nhập chẳng hạn ) ta lại đem sử dụng với n<0 =>>>>>>>>> sẽ gây ra treo máy .

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Great! Thanks

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • 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
  •