SlideShare a Scribd company logo
1 of 43
CHƯƠNG 5
GIẢI THUẬT ĐỆ QUY




     Chương 5-Giải thuật đệ quy   slide 1/ 43
Mục tiêu
Đến cuối chương, bạn có thể:
 Giải thích được giải thuật đệ quy là gì.
 Biết cách diễn đạt 1 tác vụ hướng đệ quy.
 Biết cách hiện thực hàm đệ quy
 Phân loại được các loại đệ quy
 Giải thích được cách chạy một hàm đệ
 quy.
 Biết cách khử một số giải thuật đệ quy.
               Chương 5-Giải thuật đệ quy   slide 2/ 43
Ôn tập
 Stack: Cấu trúc (thường là mảng) có cơ
 chế xử lý: vào sau ra trước.
 Queue: Cấu trúc (thường là mảng) có cơ
 chế xử lý: vào trước ra trước.
 Stack và Queue được gọi là danh sách
 hạn chế.
 Các tác vụ trên nhóm trị nói chung: Kiểm
 tra trống, kiểm tra đầy, thêm 1 phần tử,
 xóa 1 phần tử.
              Chương 5-Giải thuật đệ quy   slide 3/ 43
5.1- Đệ quy là gì (Recursion)
 Định nghĩa tường minh: Giải thích khái
 niệm mới bằng những khái niệm đã có.
 Người = Động vật cấp cao.
 Định nghĩa lòng vòng: Giải thích 1 khái
 niệm bằng chính khái niệm đó.
 Đệ quy: Đưa ra 1 định nghĩa có sử dụng
 chính khái niệm đang cần định
 nghĩa( quay về ).
 Người = con của hai người khác.
              Chương 5-Giải thuật đệ quy   slide 4/ 43
Đệ quy là gì?...
 Con người hiểu được định nghĩa đệ quy vì
 đệ quy có chặn (điều kiện biên, điều kiện
 suy biến) – có thể là biên ngầm định.
 Người = con của hai người khác  Ngầm
 hiểu là có 2 người đầu tiên.
 Thư mục = các thư mục con + các tập tin
  Ngầm hiểu: Hiển nhiên tồn tại thư mục
 gốc là cả ổ đĩa.
              Chương 5-Giải thuật đệ quy   slide 5/ 43
5.2- Kiểu dữ liệu đệ quy
    Một người được mô tả bằng: tên, năm sinh, cha
    (một người khác), mẹ (một người khác).
struct NGUOI
 { char Ten[51];
   int namsinh;          Cấu trúc này không
                        khả thi trong máy tính
   NGUOI cha;
                             vì không thể
   NGUOI me;                  cấp bộ nhớ
};

                  Chương 5-Giải thuật đệ quy   slide 6/ 43
Kiểu dữ liệu đệ quy...
   Sửa lại:
struct NGUOI
 { char Ten[51];                      pMe (4 butes)

   int namsinh;                       pCha (4 bytes)

                                    namsinh (2 bytes)
   NGUOI* pCha;
                                      Ten (51 bytes)
   NGUOI* pMe;                                          x


};
NGUOI x;
               Chương 5-Giải thuật đệ quy               slide 7/ 43
5.3- Tác vụ đệ quy
 Có thể diễn đạt nhiều tác vụ hướng đệ quy.
 1+2+3+...+ (n-2) + (n-1) + n
 Cộng( 1 tới n) = n + Cộng (1 tới n-1)
 Điều kiện biên là điều kiện ngưng không đệ quy
 nữa.
 Điều kiện biên: Cộng (1 tới 1) là 1
 Cộng (1 tới n) = 1, n=1
                  n + Cộng (1 tới n-1)

                Chương 5-Giải thuật đệ quy   slide 8/ 43
5.4- Cách viết hàm đệ quy
 Định nghĩa tác vụ đệ quy theo ngôn ngữ
 tự nhiên thế nào thì hàm cũng viết như
 thế.
 Thí dụ:      n! = 1*2*3*4*5*... * n
              n! = 1, n<=1
                    n* (n-1)!



              Chương 5-Giải thuật đệ quy   slide 9/ 43
Cách viết hàm đệ quy...
                                               2 dòng

 Điều kiện biên


n! = 1, n<=1
     n* (n-1)!


2 dòng




                  Chương 5-Giải thuật đệ quy      slide 10/ 43
Luyện tập viết hàm đệ quy
 Tìm trị phần tử thứ n của 1 cấp số cộng có
 số hạng đầu là a, công sai là r
 Un = a, n=1                   Bạn tự viết
      r + Un-1
 Tìm trị phần tử thứ n của 1 cấp số nhân
 có số hạng đầu là a, công bội là q
 Un = a, n=1
      q*Un-1
                 Chương 5-Giải thuật đệ quy   slide 11/ 43
Luyện tập viết hàm đệ quy
  Xuất biểu diễn nhị phân của 1 số nguyên
  dương.
  13  1101       Xuất dạng nhị phân của n:
                               Nếu (n>=0)
Dạng nhị phân   13%2           { Nếu (n/2>0) Xuất dạng nhị phân của n/2;
 của 6 (13/2)                      Xuất (n%2);
                               }


      Bạn tự viết

                       Chương 5-Giải thuật đệ quy             slide 12/ 43
Luyện tập viết hàm đệ quy...




Viết 2 hàm xuất hệ 8, hệ 16 cho 1 số long n

                    Chương 5-Giải thuật đệ quy   slide 13/ 43
5.5- Phân loại hàm đệ quy
    Tùy thuộc cách diễn đạt tác vụ đệ quy
    mà có các loại đệ quy sau.
(2) Đệ quy tuyến tính.
(3) Đệ quy nhị phân.
(4) Đệ quy phi tuyến
(5) Đệ quy hỗ tương.


               Chương 5-Giải thuật đệ quy   slide 14/ 43
5.5.1-Đệ quy tuyến tính
  Thân hàm gọi 1 lần chính nó
  Un = a , n=1    ( trị thứ n của cấp số cộng)
        r + Un-1 , n>1


double U (int n, double a, double r)
{ if (n==1) return a;
  return r + U(n-1,a,r);
}

                  Chương 5-Giải thuật đệ quy   slide 15/ 43
5.5.2-Đệ quy nhị phân
  Thân hàm gọi 2 lần chính nó.
  Chuỗi số Fibonacci: 1 1 2 3 5 8 13 ...
  Un = 1, n=1,2
         Un-2 + Un-1 , n>2
long Fibo (int n)
{ if (n<=2) return 1;
  return Fibo(n-2) + Fibo(n-1);
}
              Chương 5-Giải thuật đệ quy   slide 16/ 43
5.5.3-Đệ quy phi tuyến
  Thân hàm lặp gọi 1 số lần chính nó
  Un = n , n <6
      Un-5 + Un-4 + Un-3 + Un-2 + Un-1 ,n >6

long U ( int n)
{ if (n<6) return n;
   long S= 0;
   for (int i = 5; i>0; i--) S+= U(n-i);
   return S;
}
                     Chương 5-Giải thuật đệ quy   slide 17/ 43
5.5.4-Đệ quy hỗ tương
                                  long G(int n);
 2 hàm đệ quy gọi nhau            long U ( int n)
  Un = n , n<5                    { if (n<5) return n;
     Un-1 + Gn-2 , n>=5
                                      return U(n-1) + G(n-2);
 Gn = n-3 , n<8
                                  }
     Un-1 + Gn-2 , n>8
                                  long G(int n)
                                  { if (n<8) return n-3;
                                      return U(n-1) + G(n-2);
                                  }
                   Chương 5-Giải thuật đệ quy            slide 18/ 43
5.6- Kỹ thuật tìm giải thuật đệ quy
 Thông số hóa bài toán.
 Tìm các điều kiện biên(chặn), tìm giải
 thuật cho các tình huống này.
 Tìm giải thuật tổng quát theo hướng đệ
 quy lui dần về tình huống bị chặn.




              Chương 5-Giải thuật đệ quy   slide 19/ 43
Tính tổng 1 mảng a, n phần tử
 Thông số hóa: int*a, int n
 Điều kiện biên: Mảng 0 phần tử thì tổng bằng 0.
 Giải thuật chung:
 Sum(a,n) = a[0] + a[1] + a[2] + ... + a[n-2] +a[n-1]
                     Sum(a,n-1)
 Sum (a,n) = 0 , n=0
              a[n-1] + Sum(a, n-1)

 Với các thuật toán đệ quy trên mảng, ta nên giảm dần
 số phần tử của mảng.


                     Chương 5-Giải thuật đệ quy         slide 20/ 43
Tìm trị lớn nhất của mảng a, n phần tử
 Thông số hóa: int*a, int n
 Điều kiện biên: Mảng 1 phần tử thì trị lớn nhất là a[0].
 Giải thuật chung:
 Max(a,n) = a[0] a[1] a[2] ... a[n-2] +a[n-1]
                     Max(a,n-1)
 Max (a,n) = a[0] , n=1
              a[n-1] > Max(a, n-1)? a[n-1] : Max(a,n-1)

 Thuật toán đệ quy tìm trị nhỏ nhất của mảng?
                                                  Do yourself.


                     Chương 5-Giải thuật đệ quy                  slide 21/ 43
Xuất ngược 1 chuỗi
 S= “QWERT”             TREWQ
              Kết qủa xuất ngược                Ký tự đầu
                  chuỗi &S[1]                     của S


                      Xuất_ngược (S) :
                          L= strlen(S);
                          if (L>1) Xuất_ngược (S+1);
                          if (L) Xuất (*S);
Nghĩa là có
chuỗi con



                   Chương 5-Giải thuật đệ quy               slide 22/ 43
Bài toán xuất ngược 1 chuỗi




            Chương 5-Giải thuật đệ quy   slide 23/ 43
5.7- Bài toán Tháp Hà Nội




                                         A   B         C


            Chương 5-Giải thuật đệ quy           slide 24/ 43
Bài toán Tháp Hà Nội
Xem cách phân tích và mã hóa bài toán bài toán trong tài liệu tham khảo




                                                        Chuyển n đĩa từ cột X
                                                         sang cột Z nhờ cột
                                                            trung gian Y
                                  (1) Chuyển n-1 đĩa từ cột X sang cột Y nhờ
                                  cột trung gian Z vì các đĩa bên trên là các
                                  đĩa nhỏ.
                                  (2) Chuyển đĩa n (to nhất) từ cột X sang cột
                                  đích Z.
                                  (3) Làm lại cho n-1 đĩa còn lại đang ở cột Y
                                  sang cột Z với X là cột trung gian.
                         Chương 5-Giải thuật đệ quy              slide 25/ 43
Tháp Hà Nội...                    1
                                  2
                                  3




                                  3      2      1




                                         1
                                         2       3




                                                2
                                  1             3

                                  A      B       C

            Chương 5-Giải thuật đệ quy       slide 26/ 43
5.8- Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
                                                     Kq
                                                          n: 5
                                                     Kq
                                                          n: 4
                                                     Kq
                                                          n: 3
                                                     Kq
                                                          n: 2
                                                     Kq
                                                          n: 1




                        Chương 5-Giải thuật đệ quy               slide 27/ 43
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
                                                     Kq:
                                                           n: 5
                                                     Kq:
                                                           n: 4
                                                     Kq:
                                                           n: 3
                                                     Kq:
                                                           n: 2
                                                     Kq     1
                                                           n: 1




                        Chương 5-Giải thuật đệ quy                slide 28/ 43
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
                                                     Kq:
                                                           n: 5
                                                     Kq:
                                                           n: 4
                                                     Kq:
                                                           n: 3
                                                     Kq: 2*1=2
                                                           n: 2
                                                     Kq     1
                                                           n: 1




                        Chương 5-Giải thuật đệ quy                slide 29/ 43
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
                                                     Kq:
                                                           n: 5
                                                     Kq:
                                                           n: 4
                                                     Kq: 3*2=6
                                                           n: 3
                                                     Kq: 2
                                                           n: 2




                        Chương 5-Giải thuật đệ quy                slide 30/ 43
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
                                                     Kq:
                                                           n: 5
                                                     Kq: 4*6=24
                                                           n: 4
                                                     Kq: 6
                                                           n: 3




                        Chương 5-Giải thuật đệ quy                slide 31/ 43
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
                                                     Kq:5*24=120
                                                     Kq:
                                                           n: 5
                                                     Kq:     24
                                                           n: 4




                        Chương 5-Giải thuật đệ quy                slide 32/ 43
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
                                                     Kq: 120
                                                        n: 5




                        Chương 5-Giải thuật đệ quy             slide 33/ 43
5.9- Nhận xét về hàm đệ quy
          HÀM ĐỆ QUY: Vừa tốn bộ nhớ
                vừa chạy chậm


   Giải thuật đệ quy đẹp (gọn gàng, dễ chuyển
  thành chương trình.
   Nhiều ngôn ngữ không hỗ trợ giải thuật đệ quy
  (Fortran).
  Nhiều giải thuật rất dễ mô tả dạng đệ quy
  nhưng lại rất khó mô tả với giải thuật không-đệ-
  quy.
                  Chương 5-Giải thuật đệ quy    slide 34/ 43
5.10- Khử đệ quy
    Là quá trình chuyển đổi 1 giải thuật đệ quy
    thành giải thuật không đệ quy.
    Chưa có giải pháp cho việc chuyển đổi này
    một cách tổng quát.
    Cách tiếp cận:
(4) Dùng quan điểm đệ quy để tìm giải thuật cho
    bài toán.
(5) Mã hóa giải thuật đệ quy.
(6) Khử đệ quy để có giải thuật không-đệ-quy.

                 Chương 5-Giải thuật đệ quy   slide 35/ 43
5.10.1- Khử đệ quy bằng vòng lặp


 Ý tưởng: Lưu lại các trị của các lần tính toán
 trước làm dữ liệu cho việc tính toán của lần sau.
 Đi từ điều kiện biên đi tới điều kiện kết thúc.




                 Chương 5-Giải thuật đệ quy   slide 36/ 43
Thí dụ: Hàm tính giai thừa của n
long GiaiThua( int n)                       Trị cần lưu
{ if (n<2) return 1;
  return n * GiaiThua(n-1);
}                                                    Điều kiện biên

long GiaiThua( int n)                               K chính là kết qủa của trị
{ long K=1;                                            giai thừa trước đó

  for (int i =2; i<=n;i++) K=K*i;
  return K;
}


                       Chương 5-Giải thuật đệ quy                     slide 37/ 43
Thí dụ hàm tính trị thứ n của dãy Fibonacci:
long Fibo(int n)
{ if (n<=2) return 1; // hai chặn        1 1 2 3 5 8...
  return Fibo(n-2) + Fibo (n-1);                             t3=t1+t
                                          t      t
}                                         1      2              2
long Fibo(int n)                                t1      t2      t3
{ if (n<=2) return 1; // hai chặn
  long t1=1, t2=1;                                      t1      t2     t3

  for (int i=3; i<=n;i++)
                                                                t1     t2   t3
   { t3=t1+t2;
      t1=t2;                            i =             3        4     5     6
      t2= t3;
   }
return t3;
}
                           Chương 5-Giải thuật đệ quy                       slide 38/ 43
5.10.2- Khử đệ quy bằng stack
 Khởi tạo stack với số phần tử phù hợp.
 Đưa bộ tham số đầu vào stack.
 Khi Stack không trống
 { - Lấy bộ tham số ra khỏi stack;
   - Xử lý các tác vụ cơ bản ứng với tham
     số này. Nếu gặp 1 tác vụ đệ quy thì lại đưa
     bộ tham số của tác vụ đệ quy tương ứng vào
     stack.
 }

                Chương 5-Giải thuật đệ quy   slide 39/ 43
Bài toán tháp Hà Nội khử-đệ quy
                                             Giải thuật đệ quy




                Chương 5-Giải thuật đệ quy          slide 40/ 43
Tóm tắt
 Hàm đệ quy là hàm mà trong thân hàm lại
 gọi chính nó.
 Hàm đệ quy kém hiệu qủa vì: tốn bộ nhớ
 va gọi hàm qúa nhiều lần. Tuy nhiên viết
 hàm đệ quy rất ngắn gọn.
 Vòng lặp và stack là những kỹ thuật giúp
 khử giải thuật đệ quy.


              Chương 5-Giải thuật đệ quy   slide 41/ 43
Bài tập
  Viết chương trình xuất n trị đầu tiên của 1 cấp số cộng
  có số hạng đầu là a (nhập từ bàn phím), công sai r
  (nhập từ bàn phím). Sử dụng kỹ thuật đệ quy để xây
  dựng hàm tính trị thứ i của 1 cấp số cộng này.
  Dùng kỹ thuật đệ quy để giải phương trình f(x) trong
  khoảng [a,b] với sai số epsilon.
  Gọi px là pointer của nghiệm
 if (f(a).f(b)>0) return NULL (không có nghiệm)
 else if (b-a <= epsilon) return &a;
 else
    { c=(b+a)/2) ;
      if (f(a).f(c)<=0) return Tìm nghiệm trong đoạn [a,c];
      else return Tìm nghiệm trong đoạn [c,b];
    }

                     Chương 5-Giải thuật đệ quy       slide 42/ 43
Bài tập
 Viết chương trình nhập 1 mảng số int, nhập 1 trị x, tìm vị trí có
 x cuối cùng trong mảng. Dùng kỹ thuật đệ quy để tìm vị trí này.
 Tìm x trong a[], n : -1 nếu n<=0
                      n-1 nếu a[n-1]=x
                      Tìm x trong a, n-1
 Viết chương trình nhập 1 ma trận vuông các số int , nhập 1 trị
 x. Tìm vị trí <dòng,cột> có x dùng kỹ thuật đệ quy.

                        NULL, nếu n<1

Tìm vị trí có x trong   nếu có x trong cột cuối thì return vị trí này
ma trận m,n             nếu có x trong hàng cuối thì return vị trí này
                        return Tìm vị trí có x trong m,n-1




                           Chương 5-Giải thuật đệ quy                   slide 43/ 43

More Related Content

What's hot

Giáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTITGiáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTITNguynMinh294
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignmentHoangbach Nguyen
 
xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2Ngai Hoang Van
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐỗ Đức Hùng
 
xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1Ngai Hoang Van
 
xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4Ngai Hoang Van
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch độnghana_dt
 
Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02Nhóc Nhóc
 
Toán Rời Rạc.pdf
Toán Rời Rạc.pdfToán Rời Rạc.pdf
Toán Rời Rạc.pdfBui Loi
 
Đề thi Kỹ thuật lập trình có lời giải
Đề thi Kỹ thuật lập trình có lời giảiĐề thi Kỹ thuật lập trình có lời giải
Đề thi Kỹ thuật lập trình có lời giảinataliej4
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Nguyễn Công Hoàng
 
Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03Nhóc Nhóc
 
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư việnThe Nguyen Manh
 

What's hot (20)

Giáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTITGiáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTIT
 
Đệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh CậnĐệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh Cận
 
Phương pháp tham lam
Phương pháp tham lamPhương pháp tham lam
Phương pháp tham lam
 
Xử lý tín hiệu số
Xử lý tín hiệu sốXử lý tín hiệu số
Xử lý tín hiệu số
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignment
 
Luận văn: Một số bài toán về dãy số, HAY, 9đ
Luận văn: Một số bài toán về dãy số, HAY, 9đLuận văn: Một số bài toán về dãy số, HAY, 9đ
Luận văn: Một số bài toán về dãy số, HAY, 9đ
 
xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2
 
Lab lap trinhmang_v3
Lab lap trinhmang_v3Lab lap trinhmang_v3
Lab lap trinhmang_v3
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
 
xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1
 
xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch động
 
Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02
 
Luận văn: Ứng dụng kỹ thuật học máy vào phát hiện mã độc, 9đ
Luận văn: Ứng dụng kỹ thuật học máy vào phát hiện mã độc, 9đLuận văn: Ứng dụng kỹ thuật học máy vào phát hiện mã độc, 9đ
Luận văn: Ứng dụng kỹ thuật học máy vào phát hiện mã độc, 9đ
 
Toán Rời Rạc.pdf
Toán Rời Rạc.pdfToán Rời Rạc.pdf
Toán Rời Rạc.pdf
 
Đề thi Kỹ thuật lập trình có lời giải
Đề thi Kỹ thuật lập trình có lời giảiĐề thi Kỹ thuật lập trình có lời giải
Đề thi Kỹ thuật lập trình có lời giải
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
 
Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03
 
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
 

Viewers also liked

Cach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duocCach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duochcmavano
 
Chuong 2. de quy dai hoc
Chuong 2. de quy   dai hocChuong 2. de quy   dai hoc
Chuong 2. de quy dai hocVũ Nam
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modulesTrần Văn Nam
 
Multithreaded algorithms
Multithreaded algorithmsMultithreaded algorithms
Multithreaded algorithmsSoicon Karo
 
CTDL&GT: Các loại danh sách liên kết
CTDL&GT: Các loại danh sách liên kếtCTDL&GT: Các loại danh sách liên kết
CTDL&GT: Các loại danh sách liên kếtVan-Duyet Le
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequyHồ Lợi
 
C3 danh sachlienket
C3 danh sachlienketC3 danh sachlienket
C3 danh sachlienkethiep0109
 
Programming technique 1_2_7921
Programming technique 1_2_7921Programming technique 1_2_7921
Programming technique 1_2_7921tienhien110293
 
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIATypes Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIADheeraj Kataria
 
Phần 7: Mảng một chiều
Phần 7: Mảng một chiềuPhần 7: Mảng một chiều
Phần 7: Mảng một chiềuHuy Rùa
 
Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007Huynh Bao Thien
 
Danh Sach Lien Ket
Danh Sach Lien KetDanh Sach Lien Ket
Danh Sach Lien KetTony Nhân
 

Viewers also liked (20)

Bai de quy
Bai de quyBai de quy
Bai de quy
 
Cach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duocCach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duoc
 
Chuong 2. de quy dai hoc
Chuong 2. de quy   dai hocChuong 2. de quy   dai hoc
Chuong 2. de quy dai hoc
 
Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Lesson08
Lesson08Lesson08
Lesson08
 
Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
24 Multithreaded Algorithms
24 Multithreaded Algorithms24 Multithreaded Algorithms
24 Multithreaded Algorithms
 
Multithreaded algorithms
Multithreaded algorithmsMultithreaded algorithms
Multithreaded algorithms
 
CTDL&GT: Các loại danh sách liên kết
CTDL&GT: Các loại danh sách liên kếtCTDL&GT: Các loại danh sách liên kết
CTDL&GT: Các loại danh sách liên kết
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequy
 
C3 danh sachlienket
C3 danh sachlienketC3 danh sachlienket
C3 danh sachlienket
 
Programming technique 1_2_7921
Programming technique 1_2_7921Programming technique 1_2_7921
Programming technique 1_2_7921
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
 
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIATypes Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
 
Parallel Algorithms
Parallel AlgorithmsParallel Algorithms
Parallel Algorithms
 
Phần 7: Mảng một chiều
Phần 7: Mảng một chiềuPhần 7: Mảng một chiều
Phần 7: Mảng một chiều
 
Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007
 
Danh Sach Lien Ket
Danh Sach Lien KetDanh Sach Lien Ket
Danh Sach Lien Ket
 

Similar to Chuong 05 de quy

Thuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo pThuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo pBui Loi
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Nguyễn Công Hoàng
 
Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxepHồ Lợi
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Tai lieu boi duong doi tuyen quoc gia 2013 3
Tai lieu boi duong doi tuyen quoc gia 2013 3Tai lieu boi duong doi tuyen quoc gia 2013 3
Tai lieu boi duong doi tuyen quoc gia 2013 3nataliej4
 
Bai 01 dabttl_so_phuc_phan_01
Bai 01 dabttl_so_phuc_phan_01Bai 01 dabttl_so_phuc_phan_01
Bai 01 dabttl_so_phuc_phan_01Huynh ICT
 
Diophantine equations Phương trình diophant
Diophantine equations Phương trình diophantDiophantine equations Phương trình diophant
Diophantine equations Phương trình diophantBui Loi
 
[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...Nguyen Vietnam
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTrần Nguyên
 

Similar to Chuong 05 de quy (20)

Gt de quy
Gt de quyGt de quy
Gt de quy
 
Gt de quy_2
Gt de quy_2Gt de quy_2
Gt de quy_2
 
Thuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo pThuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo p
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
 
Đề tài: Bài toán phương trình đạo hàm riêng dạng elliptic, HAY
Đề tài: Bài toán phương trình đạo hàm riêng dạng elliptic, HAYĐề tài: Bài toán phương trình đạo hàm riêng dạng elliptic, HAY
Đề tài: Bài toán phương trình đạo hàm riêng dạng elliptic, HAY
 
Olympiad help
Olympiad helpOlympiad help
Olympiad help
 
Chap2 new
Chap2 newChap2 new
Chap2 new
 
Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxep
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
Gt12cb 73
Gt12cb 73Gt12cb 73
Gt12cb 73
 
Nhom7 ltdpt
Nhom7  ltdptNhom7  ltdpt
Nhom7 ltdpt
 
Tai lieu boi duong doi tuyen quoc gia 2013 3
Tai lieu boi duong doi tuyen quoc gia 2013 3Tai lieu boi duong doi tuyen quoc gia 2013 3
Tai lieu boi duong doi tuyen quoc gia 2013 3
 
Bai 01 dabttl_so_phuc_phan_01
Bai 01 dabttl_so_phuc_phan_01Bai 01 dabttl_so_phuc_phan_01
Bai 01 dabttl_so_phuc_phan_01
 
Chap3 new
Chap3 newChap3 new
Chap3 new
 
Chuong2 de qui
Chuong2 de quiChuong2 de qui
Chuong2 de qui
 
Diophantine equations Phương trình diophant
Diophantine equations Phương trình diophantDiophantine equations Phương trình diophant
Diophantine equations Phương trình diophant
 
Baitap ktlt
Baitap ktltBaitap ktlt
Baitap ktlt
 
[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi phan ham nhieu bien_...
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
 

More from Cau Chu Nho

More from Cau Chu Nho (9)

Lesson07
Lesson07Lesson07
Lesson07
 
Lesson06
Lesson06Lesson06
Lesson06
 
Lesson05
Lesson05Lesson05
Lesson05
 
Lesson04
Lesson04Lesson04
Lesson04
 
Lesson02
Lesson02Lesson02
Lesson02
 
Lesson01
Lesson01Lesson01
Lesson01
 
Lesson00
Lesson00Lesson00
Lesson00
 
c3 mang2 chieu
c3 mang2 chieuc3 mang2 chieu
c3 mang2 chieu
 
Mang1 chieu
Mang1 chieuMang1 chieu
Mang1 chieu
 

Chuong 05 de quy

  • 1. CHƯƠNG 5 GIẢI THUẬT ĐỆ QUY Chương 5-Giải thuật đệ quy slide 1/ 43
  • 2. Mục tiêu Đến cuối chương, bạn có thể: Giải thích được giải thuật đệ quy là gì. Biết cách diễn đạt 1 tác vụ hướng đệ quy. Biết cách hiện thực hàm đệ quy Phân loại được các loại đệ quy Giải thích được cách chạy một hàm đệ quy. Biết cách khử một số giải thuật đệ quy. Chương 5-Giải thuật đệ quy slide 2/ 43
  • 3. Ôn tập Stack: Cấu trúc (thường là mảng) có cơ chế xử lý: vào sau ra trước. Queue: Cấu trúc (thường là mảng) có cơ chế xử lý: vào trước ra trước. Stack và Queue được gọi là danh sách hạn chế. Các tác vụ trên nhóm trị nói chung: Kiểm tra trống, kiểm tra đầy, thêm 1 phần tử, xóa 1 phần tử. Chương 5-Giải thuật đệ quy slide 3/ 43
  • 4. 5.1- Đệ quy là gì (Recursion) Định nghĩa tường minh: Giải thích khái niệm mới bằng những khái niệm đã có. Người = Động vật cấp cao. Định nghĩa lòng vòng: Giải thích 1 khái niệm bằng chính khái niệm đó. Đệ quy: Đưa ra 1 định nghĩa có sử dụng chính khái niệm đang cần định nghĩa( quay về ). Người = con của hai người khác. Chương 5-Giải thuật đệ quy slide 4/ 43
  • 5. Đệ quy là gì?... Con người hiểu được định nghĩa đệ quy vì đệ quy có chặn (điều kiện biên, điều kiện suy biến) – có thể là biên ngầm định. Người = con của hai người khác  Ngầm hiểu là có 2 người đầu tiên. Thư mục = các thư mục con + các tập tin  Ngầm hiểu: Hiển nhiên tồn tại thư mục gốc là cả ổ đĩa. Chương 5-Giải thuật đệ quy slide 5/ 43
  • 6. 5.2- Kiểu dữ liệu đệ quy Một người được mô tả bằng: tên, năm sinh, cha (một người khác), mẹ (một người khác). struct NGUOI { char Ten[51]; int namsinh; Cấu trúc này không khả thi trong máy tính NGUOI cha; vì không thể NGUOI me; cấp bộ nhớ }; Chương 5-Giải thuật đệ quy slide 6/ 43
  • 7. Kiểu dữ liệu đệ quy... Sửa lại: struct NGUOI { char Ten[51]; pMe (4 butes) int namsinh; pCha (4 bytes) namsinh (2 bytes) NGUOI* pCha; Ten (51 bytes) NGUOI* pMe; x }; NGUOI x; Chương 5-Giải thuật đệ quy slide 7/ 43
  • 8. 5.3- Tác vụ đệ quy Có thể diễn đạt nhiều tác vụ hướng đệ quy. 1+2+3+...+ (n-2) + (n-1) + n Cộng( 1 tới n) = n + Cộng (1 tới n-1) Điều kiện biên là điều kiện ngưng không đệ quy nữa. Điều kiện biên: Cộng (1 tới 1) là 1 Cộng (1 tới n) = 1, n=1 n + Cộng (1 tới n-1) Chương 5-Giải thuật đệ quy slide 8/ 43
  • 9. 5.4- Cách viết hàm đệ quy Định nghĩa tác vụ đệ quy theo ngôn ngữ tự nhiên thế nào thì hàm cũng viết như thế. Thí dụ: n! = 1*2*3*4*5*... * n n! = 1, n<=1 n* (n-1)! Chương 5-Giải thuật đệ quy slide 9/ 43
  • 10. Cách viết hàm đệ quy... 2 dòng Điều kiện biên n! = 1, n<=1 n* (n-1)! 2 dòng Chương 5-Giải thuật đệ quy slide 10/ 43
  • 11. Luyện tập viết hàm đệ quy Tìm trị phần tử thứ n của 1 cấp số cộng có số hạng đầu là a, công sai là r Un = a, n=1 Bạn tự viết r + Un-1 Tìm trị phần tử thứ n của 1 cấp số nhân có số hạng đầu là a, công bội là q Un = a, n=1 q*Un-1 Chương 5-Giải thuật đệ quy slide 11/ 43
  • 12. Luyện tập viết hàm đệ quy Xuất biểu diễn nhị phân của 1 số nguyên dương. 13  1101 Xuất dạng nhị phân của n: Nếu (n>=0) Dạng nhị phân 13%2 { Nếu (n/2>0) Xuất dạng nhị phân của n/2; của 6 (13/2) Xuất (n%2); } Bạn tự viết Chương 5-Giải thuật đệ quy slide 12/ 43
  • 13. Luyện tập viết hàm đệ quy... Viết 2 hàm xuất hệ 8, hệ 16 cho 1 số long n Chương 5-Giải thuật đệ quy slide 13/ 43
  • 14. 5.5- Phân loại hàm đệ quy Tùy thuộc cách diễn đạt tác vụ đệ quy mà có các loại đệ quy sau. (2) Đệ quy tuyến tính. (3) Đệ quy nhị phân. (4) Đệ quy phi tuyến (5) Đệ quy hỗ tương. Chương 5-Giải thuật đệ quy slide 14/ 43
  • 15. 5.5.1-Đệ quy tuyến tính Thân hàm gọi 1 lần chính nó Un = a , n=1 ( trị thứ n của cấp số cộng) r + Un-1 , n>1 double U (int n, double a, double r) { if (n==1) return a; return r + U(n-1,a,r); } Chương 5-Giải thuật đệ quy slide 15/ 43
  • 16. 5.5.2-Đệ quy nhị phân Thân hàm gọi 2 lần chính nó. Chuỗi số Fibonacci: 1 1 2 3 5 8 13 ... Un = 1, n=1,2 Un-2 + Un-1 , n>2 long Fibo (int n) { if (n<=2) return 1; return Fibo(n-2) + Fibo(n-1); } Chương 5-Giải thuật đệ quy slide 16/ 43
  • 17. 5.5.3-Đệ quy phi tuyến Thân hàm lặp gọi 1 số lần chính nó Un = n , n <6 Un-5 + Un-4 + Un-3 + Un-2 + Un-1 ,n >6 long U ( int n) { if (n<6) return n; long S= 0; for (int i = 5; i>0; i--) S+= U(n-i); return S; } Chương 5-Giải thuật đệ quy slide 17/ 43
  • 18. 5.5.4-Đệ quy hỗ tương long G(int n); 2 hàm đệ quy gọi nhau long U ( int n) Un = n , n<5 { if (n<5) return n; Un-1 + Gn-2 , n>=5 return U(n-1) + G(n-2); Gn = n-3 , n<8 } Un-1 + Gn-2 , n>8 long G(int n) { if (n<8) return n-3; return U(n-1) + G(n-2); } Chương 5-Giải thuật đệ quy slide 18/ 43
  • 19. 5.6- Kỹ thuật tìm giải thuật đệ quy Thông số hóa bài toán. Tìm các điều kiện biên(chặn), tìm giải thuật cho các tình huống này. Tìm giải thuật tổng quát theo hướng đệ quy lui dần về tình huống bị chặn. Chương 5-Giải thuật đệ quy slide 19/ 43
  • 20. Tính tổng 1 mảng a, n phần tử Thông số hóa: int*a, int n Điều kiện biên: Mảng 0 phần tử thì tổng bằng 0. Giải thuật chung: Sum(a,n) = a[0] + a[1] + a[2] + ... + a[n-2] +a[n-1] Sum(a,n-1) Sum (a,n) = 0 , n=0 a[n-1] + Sum(a, n-1) Với các thuật toán đệ quy trên mảng, ta nên giảm dần số phần tử của mảng. Chương 5-Giải thuật đệ quy slide 20/ 43
  • 21. Tìm trị lớn nhất của mảng a, n phần tử Thông số hóa: int*a, int n Điều kiện biên: Mảng 1 phần tử thì trị lớn nhất là a[0]. Giải thuật chung: Max(a,n) = a[0] a[1] a[2] ... a[n-2] +a[n-1] Max(a,n-1) Max (a,n) = a[0] , n=1 a[n-1] > Max(a, n-1)? a[n-1] : Max(a,n-1) Thuật toán đệ quy tìm trị nhỏ nhất của mảng? Do yourself. Chương 5-Giải thuật đệ quy slide 21/ 43
  • 22. Xuất ngược 1 chuỗi S= “QWERT”  TREWQ Kết qủa xuất ngược Ký tự đầu chuỗi &S[1] của S Xuất_ngược (S) : L= strlen(S); if (L>1) Xuất_ngược (S+1); if (L) Xuất (*S); Nghĩa là có chuỗi con Chương 5-Giải thuật đệ quy slide 22/ 43
  • 23. Bài toán xuất ngược 1 chuỗi Chương 5-Giải thuật đệ quy slide 23/ 43
  • 24. 5.7- Bài toán Tháp Hà Nội A B C Chương 5-Giải thuật đệ quy slide 24/ 43
  • 25. Bài toán Tháp Hà Nội Xem cách phân tích và mã hóa bài toán bài toán trong tài liệu tham khảo Chuyển n đĩa từ cột X sang cột Z nhờ cột trung gian Y (1) Chuyển n-1 đĩa từ cột X sang cột Y nhờ cột trung gian Z vì các đĩa bên trên là các đĩa nhỏ. (2) Chuyển đĩa n (to nhất) từ cột X sang cột đích Z. (3) Làm lại cho n-1 đĩa còn lại đang ở cột Y sang cột Z với X là cột trung gian. Chương 5-Giải thuật đệ quy slide 25/ 43
  • 26. Tháp Hà Nội... 1 2 3 3 2 1 1 2 3 2 1 3 A B C Chương 5-Giải thuật đệ quy slide 26/ 43
  • 27. 5.8- Cách thực thi 1 hàm đệ quy Xét hàm tính giai thừa của 5 Kq n: 5 Kq n: 4 Kq n: 3 Kq n: 2 Kq n: 1 Chương 5-Giải thuật đệ quy slide 27/ 43
  • 28. Cách thực thi 1 hàm đệ quy Xét hàm tính giai thừa của 5 Kq: n: 5 Kq: n: 4 Kq: n: 3 Kq: n: 2 Kq 1 n: 1 Chương 5-Giải thuật đệ quy slide 28/ 43
  • 29. Cách thực thi 1 hàm đệ quy Xét hàm tính giai thừa của 5 Kq: n: 5 Kq: n: 4 Kq: n: 3 Kq: 2*1=2 n: 2 Kq 1 n: 1 Chương 5-Giải thuật đệ quy slide 29/ 43
  • 30. Cách thực thi 1 hàm đệ quy Xét hàm tính giai thừa của 5 Kq: n: 5 Kq: n: 4 Kq: 3*2=6 n: 3 Kq: 2 n: 2 Chương 5-Giải thuật đệ quy slide 30/ 43
  • 31. Cách thực thi 1 hàm đệ quy Xét hàm tính giai thừa của 5 Kq: n: 5 Kq: 4*6=24 n: 4 Kq: 6 n: 3 Chương 5-Giải thuật đệ quy slide 31/ 43
  • 32. Cách thực thi 1 hàm đệ quy Xét hàm tính giai thừa của 5 Kq:5*24=120 Kq: n: 5 Kq: 24 n: 4 Chương 5-Giải thuật đệ quy slide 32/ 43
  • 33. Cách thực thi 1 hàm đệ quy Xét hàm tính giai thừa của 5 Kq: 120 n: 5 Chương 5-Giải thuật đệ quy slide 33/ 43
  • 34. 5.9- Nhận xét về hàm đệ quy HÀM ĐỆ QUY: Vừa tốn bộ nhớ vừa chạy chậm Giải thuật đệ quy đẹp (gọn gàng, dễ chuyển thành chương trình. Nhiều ngôn ngữ không hỗ trợ giải thuật đệ quy (Fortran). Nhiều giải thuật rất dễ mô tả dạng đệ quy nhưng lại rất khó mô tả với giải thuật không-đệ- quy. Chương 5-Giải thuật đệ quy slide 34/ 43
  • 35. 5.10- Khử đệ quy Là quá trình chuyển đổi 1 giải thuật đệ quy thành giải thuật không đệ quy. Chưa có giải pháp cho việc chuyển đổi này một cách tổng quát. Cách tiếp cận: (4) Dùng quan điểm đệ quy để tìm giải thuật cho bài toán. (5) Mã hóa giải thuật đệ quy. (6) Khử đệ quy để có giải thuật không-đệ-quy. Chương 5-Giải thuật đệ quy slide 35/ 43
  • 36. 5.10.1- Khử đệ quy bằng vòng lặp Ý tưởng: Lưu lại các trị của các lần tính toán trước làm dữ liệu cho việc tính toán của lần sau. Đi từ điều kiện biên đi tới điều kiện kết thúc. Chương 5-Giải thuật đệ quy slide 36/ 43
  • 37. Thí dụ: Hàm tính giai thừa của n long GiaiThua( int n) Trị cần lưu { if (n<2) return 1; return n * GiaiThua(n-1); } Điều kiện biên long GiaiThua( int n) K chính là kết qủa của trị { long K=1; giai thừa trước đó for (int i =2; i<=n;i++) K=K*i; return K; } Chương 5-Giải thuật đệ quy slide 37/ 43
  • 38. Thí dụ hàm tính trị thứ n của dãy Fibonacci: long Fibo(int n) { if (n<=2) return 1; // hai chặn 1 1 2 3 5 8... return Fibo(n-2) + Fibo (n-1); t3=t1+t t t } 1 2 2 long Fibo(int n) t1 t2 t3 { if (n<=2) return 1; // hai chặn long t1=1, t2=1; t1 t2 t3 for (int i=3; i<=n;i++) t1 t2 t3 { t3=t1+t2; t1=t2; i = 3 4 5 6 t2= t3; } return t3; } Chương 5-Giải thuật đệ quy slide 38/ 43
  • 39. 5.10.2- Khử đệ quy bằng stack Khởi tạo stack với số phần tử phù hợp. Đưa bộ tham số đầu vào stack. Khi Stack không trống { - Lấy bộ tham số ra khỏi stack; - Xử lý các tác vụ cơ bản ứng với tham số này. Nếu gặp 1 tác vụ đệ quy thì lại đưa bộ tham số của tác vụ đệ quy tương ứng vào stack. } Chương 5-Giải thuật đệ quy slide 39/ 43
  • 40. Bài toán tháp Hà Nội khử-đệ quy Giải thuật đệ quy Chương 5-Giải thuật đệ quy slide 40/ 43
  • 41. Tóm tắt Hàm đệ quy là hàm mà trong thân hàm lại gọi chính nó. Hàm đệ quy kém hiệu qủa vì: tốn bộ nhớ va gọi hàm qúa nhiều lần. Tuy nhiên viết hàm đệ quy rất ngắn gọn. Vòng lặp và stack là những kỹ thuật giúp khử giải thuật đệ quy. Chương 5-Giải thuật đệ quy slide 41/ 43
  • 42. Bài tập Viết chương trình xuất n trị đầu tiên của 1 cấp số cộng có số hạng đầu là a (nhập từ bàn phím), công sai r (nhập từ bàn phím). Sử dụng kỹ thuật đệ quy để xây dựng hàm tính trị thứ i của 1 cấp số cộng này. Dùng kỹ thuật đệ quy để giải phương trình f(x) trong khoảng [a,b] với sai số epsilon. Gọi px là pointer của nghiệm if (f(a).f(b)>0) return NULL (không có nghiệm) else if (b-a <= epsilon) return &a; else { c=(b+a)/2) ; if (f(a).f(c)<=0) return Tìm nghiệm trong đoạn [a,c]; else return Tìm nghiệm trong đoạn [c,b]; } Chương 5-Giải thuật đệ quy slide 42/ 43
  • 43. Bài tập Viết chương trình nhập 1 mảng số int, nhập 1 trị x, tìm vị trí có x cuối cùng trong mảng. Dùng kỹ thuật đệ quy để tìm vị trí này. Tìm x trong a[], n : -1 nếu n<=0 n-1 nếu a[n-1]=x Tìm x trong a, n-1 Viết chương trình nhập 1 ma trận vuông các số int , nhập 1 trị x. Tìm vị trí <dòng,cột> có x dùng kỹ thuật đệ quy. NULL, nếu n<1 Tìm vị trí có x trong nếu có x trong cột cuối thì return vị trí này ma trận m,n nếu có x trong hàng cuối thì return vị trí này return Tìm vị trí có x trong m,n-1 Chương 5-Giải thuật đệ quy slide 43/ 43