Bài giảng Kiến trúc máy tính - Chương 3: Lập trình đệ quy - Nguyễn Đức Minh

pdf 10 trang cucquyet12 3960
Bạn đang xem tài liệu "Bài giảng Kiến trúc máy tính - Chương 3: Lập trình đệ quy - Nguyễn Đức Minh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_kien_truc_may_tinh_chuong_3_lap_trinh_de_quy_nguye.pdf

Nội dung text: Bài giảng Kiến trúc máy tính - Chương 3: Lập trình đệ quy - Nguyễn Đức Minh

  1. Chương 3: LẬP TRÌNH ĐỆ QUI 1. Tổng quan về lập trình đệ qui 2. Đệ qui tuyến tính 3. Đệ qui nhị phân 4. Đệ qui phi tuyến 5. Đệ qui tương hỗ
  2. 1.Tổng quan về lập trình đệ qui • Đệ qui là hàm cho phép gọi đến chính hàm đó • Trong lập trình đệ qui sẽ bao gồm 2 phần: – Phần neo:Là phần cơ sở, cho phép tính một giá trị cụ thể – Phần đệ qui:Cho phép gọi lại chính hàm đó để tính giá trị hiện tại của hàm bằng cách gọi các hàm tính giá trị ở bước trước đó. • Có 4 loại đệ qui là đệ qui tuyến tính, đệ qui nhị phân, đệ qui phi tuyến và đệ qui tương hỗ.
  3. 2. Đệ qui tuyến tính • Là loại hàm đệ qui phổ biến nhất. • Nó có cú pháp như sau: Ham { if( ) { Trả về kết quả hoặc kết thúc công việc } else { Thực hiên công việc – nếu cần Gọi đệ qui } }
  4. 2. Đệ qui tuyến tính • Ví dụ: Viết hàm đệ qui tính n! – Định nghĩa: n! = 1x2x .x(n-1)xn. Ta có: • 1!=1; • 2! = 1 x 2  2 X 1! • 3! = 1 x 2 x 3  3 X 2! • 4! = 1 x 2 x 3 x 4  4 x 3! • • n!=1 x 2 x 3 x .x (n-1) x n  (n-1)! x n
  5. 3. Đệ qui nhị phân • Là loại hàm đệ qui cho phép chia ra thành những việc nhỏ hơn, không cồng kềnh. • Cú pháp Ham { if( ) { Trả về kết quả hoặc kết thúc công việc } else { Thực hiên công việc – nếu cần Gọi đệ qui 1()//Giải quyết việc nhỏ hơn Gọi đệ qui 2()//Giải quyết phần còn lại } }
  6. 3. Đệ qui nhị phân • Ví dụ: – Tìm số fibo thứ n có thể tính bằng cách: • Tìm F(n-1) • Tìm F(n-2) • ret=F(n -1)+F(n-2); – Tìm phần tử lớn nhất, bé nhất ở trong mảng. • Tìm giá trị lớn nhất ở bên trái • Tìm giá trị lớn nhất ở bên phải • So sánh giá trị lớn nhất, nhỏ nhất ở bên trái, bên phải tìm giá trị lớn nhất, nhỏ nhất.
  7. 4. Đệ qui phi tuyến • Đệ qui phi tuyến cho phép gọi đệ qui bên trong vòng lặp. • Cú pháp Ham { for(i=0;i } }
  8. 4. Đệ qui phi tuyến • Ví dụ: Tìm dãy {Xn} xác định theo công thức truy hồi sau đây: Xo = 1 2 2 2 Xn = n Xo +(n-1) X1+ +1 Xn-1 nếu n>=1 Nếu n = 0 => Xo =1 n = 1 => X1 = 1 n = 2 => 22x1 +12x1 = 5 n = 3 => 32x1 + 22 x 1 + 1x5 = 18 n = 4 => 42x1+32x1+22x5+12x18 = 63
  9. 5. Đệ qui tương hỗ • Là loại hàm đệ qui gọi lại chính nó thông qua 1 hàm khác. • Cú pháp: Ham1 { //Làm 1 số việc nếu cần Ham2( ); //Làm 1 số việc nếu cần } Ham2 { //Làm 1 số việc nếu cần Ham1( ); //Làm 1 số việc nếu cần }
  10. 5. Đệ qui tương hỗ • Ví dụ: Hai dãy {Xn}, {Yn} được định nghĩa Xo=Yo = 1 Xn=Xn-1 + Yn-1 2 Yn=n Xn-1 + Yn-1 Nếu n =0 => Xo = Yo = 1 n = 1 => X1 = 1+1 = 2 2 Y1 = 1 x1 + 1 = 2 n =2 => X2 = 2 + 2 = 4 2 Y2= 2 x2 + 2 = 10