Tải bản đầy đủ (.pptx) (55 trang)

đệ quy pascal chi tiết dễ hiểu nhất

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.08 MB, 55 trang )

Cấu trúc dữ liệu và giải thuật
Chương III: Giải thuật đệ quy

Chương III. GIẢI THUẬT ĐỆ QUY
I. KHÁI NIỆM VỀ ĐỆ QUY
II. GIẢI THUẬT ĐỆ QUY VÀ THỦ TỤC ĐỆ QUY
III. THIẾT KẾ GIẢI THUẬT ĐỆ QUY
IV. HIỆU LỰC CỦA ĐỆ QUY
V. BÀI TẬP

I. Khái niệm đệ qui
Ta nói một đối tượng là đệ
qui nếu nó được định nghĩa
qua chính nó hoặc một đối
tượng khác cùng dạng với
chính nó bằng qui nạp.

Ví dụ đệ qui
o
Số tự nhiên

1 là số tự nhiên_phần neo

x là số tự nhiên nếu x-1 là số tự nhiên_ phần đệ qui.
o
Hàm n!

Ứng với n=0 thì 0! = 1_phần neo

Nếu n>1 thì n! = n(n-1)!_phần đệ qui.
Sau mỗi lần đệ quy giá trị n giảm đi 1 và bài toán dần tới


trường hợp suy biến (n=0). Biến n được gọi là biến điều
khiển, trong đệ quy việc xác đinh biến điều khiển là điều cần
thiết để tìm ra giải thuật của bài toán

Đệ qui có 2 phần

Phần neo (phần suy biến): Phần
này được thực hiện khi mà công
việc quá đơn giản, có thể giải trực
tiếp chứ không cần phải nhờ đến
một bài toán con nào cả.


Phần đệ quy: Trong trường hợp bài
toán chưa thể giải được bằng phần
neo, ta xác định bài toán con và gọi
đệ quy giải những bài toán con đó.
Khi đã có lời giải (đáp số) của những
bài toán con rồi thì phối hợp chúng
lại để giải bài toán đang xét

Chú ý

Một định nghĩa đệ qui bao giờ
cũng có một điểm dừng hoặc
một trường hợp đặc biệt nào
đó để xác định giá trị đơn giản
nhất của định nghĩa đệ qui.
Trường hợp này được gọi là
trường hợp suy biến


II.Giải thuật đệ qui và thủ tục đệ qui
1. GIẢI THUẬT ĐỆ QUI

Nếu lời giải của bài toán T được thực
hiện bằng lời giải của bài toán T’ giống T
thì đó được gọi là một lời giải đệ quy.
Giải thuật cho lời giải đệ quy được gọi là
một giải thuật đệ quy.

Chú ý T’<T

VÍ DỤ:TÌM TỪ TRONG TỪ ĐiỂN
IF từ điển là 1 trang
then tìm từ trong trang này [ phần suy biến]
Else begin [ phần đệ qui]
Mở từ điển vào trang giữa;
Xác định xem nửa nào của từ điển chứa từ
cần tìm;
If nằm ở nửa trước của từ điển.
Then tìm từ đó trong nửa trước.
Else tìm từ đó trong nửa sau.
End;

  ụ ế

  ừ ầ

Ta thấy có điểm lưu ý trong phần đệ qui, sau
môi lần tách đôi từ điển thì một nửa thích hợp

sẽ lai được tìm kiếm như chiến thuật đã dùng
trước đó và tiến dần đến phần suy biến.ta có
thể giải bài toán tìm chữ(T) bằng bài toán nhỏ
hơn(T’) khái quát như hình:

hoặc
Tìm từ trong từ điển
Tìm trong nửa trước
Tìm trong nửa sau

2. thủ tục đệ qui
o
Thủ tục đệ qui là điều kiện cần của giải
thuật đệ qui .
o
Có 2 loại thủ tục đệ qui

Đệ qui trực tiếp: nếu thủ tục chứa lời gọi
đến chính nó.

Đệ qui gián tiếp: : thủ tục chứa lời gọi
đến thủ tục khác mà ở thủ tục này lại
chứa lời gọi đến nó.

    ủ ụ ệ ế

Có 4 loại đệ qui trực tiếp
Đệ qui Tuyến tính:thân hàm gọi 1 lần
chính nó
Đệ qui Nhị phân:thân hàm gọi 2 lần

chính nó
Đệ qui Phi tuyến:thân hàm lặp gọi 1
số lần chính nó


Ví dụ : thủ tục tìm từ trong từ điển

Di được coi là đầu mối để truy cập vào từ điển đang xét,
word chỉ từ cần tìm.
If từ điển chỉ còn một trang
Then tìm từ word trong trang này
Else begin
Mở từ điển vào trang giữa;
Xác định xem nửa nào của từ điển chứa từ word;
If nằm ở nửa trước của từ điển.
Then tìm từ word trong nửa trước.
Else tìm từ word trong nửa sau.
Then call SEARCH (Di 1, word)
Else call SEARCH (Di 2, word)
End;

Nhận xét

Tồn tại một trường hợp suy biến gọi là
giá trị neo làm kết thúc giải thuật đệ quy.

+ Trong phần thủ tục chứa lời gọi tới
chính nó.(thủ tục search có call search)

+ Sau mỗi lần gọi thì kích thước bài

toán thu nhỏ hơn rồi dần dần dẫn đến
trường hợp suy biến.


Cơ chế thực hiện của thủ tục đệ quy trực tiếp

Từ chương trình chính gọi thủ tục đệ quy là đệ quy mức 1

Từ thủ tục đệ quy gọi nó lần 2 gọi là đệ quy mức 2

Khi nào ở mức i thì kiểm tra điều kiện ở mức i rồi thực hiện điều kiện
suy biến

Nếu chưa suy biến thì có thể gửi các thông tin

Các tham số mà mức i truyền cho mức i+1

Các biến cục bộ ở mức i và địa chỉ lối về vào ngăn xếp rồi bấm vào
mức i+1
Nếu đã suy biến thì nó tính nốt phần còn lại rồi lấy thông tin từ ngăn xếp để
quay về mức i-2



!"#$%&'()*'+ )Ậ
!,+-.
!"#$%&'+&/+#' $Ộ
!0123 4$"%'5,,$Ố
!"#$%&'6
III. THIẾT KẾ GIẢI THUẬT ĐỆ QUY

7
!"#$%&'()*'+ )Ậ
!,+-.
!"#$%&'+&/+#' $Ộ
!0123 4$"%'5,,$Ố
!"#$%&'6
III. THIẾT KẾ GIẢI THUẬT ĐỆ QUY
7
1.Hàm n!

Định nghĩa đệ quy của n!
factorial (n)
=


7
1. Hàm n!

Thủ tục hàm:

Function FACTORIAL(n)
1. If n=0 then FACTORIAL:=1
else
FACTORIAL:=n*FACTORIAL(n-1)
2. Return
7
1. Hàm n!
Ví dụ: Tính 3!
3! = 3*2!
2!=2*1!

1!=1*0!
0!=1 trường hợp suy biến
7
!"#$%&'()*'+ )Ậ
!,+-.
!"#$%&'+&/+#' $Ộ
!0123 4$"%'5,,$Ố
!"#$%&'6
III. THIẾT KẾ GIẢI THUẬT ĐỆ QUY
7
2. Dãy số Fiboncci
Bài toán được đặt ra như sau:

Các con thỏ không bao giờ chết.

Hai tháng sau khi ra đời, 1 cặp thỏ mới sẽ
sinh ra một cặp thỏ con (1 đực, 1 cái).

Khi đã sinh con rồi thì cứ mỗi tháng tiếp
theo chúng lại sinh được một cặp con
mới.
Giả sử bắt đầu từ một cặp mới ra đời thì đến
tháng thứ n sẽ có bao nhiêu cặp?
7
2. Dãy số Fibonacci
Ví dụ: n=5 ta thấy:
Tháng thứ 1:1 cặp (cặp ban đầu)
Tháng thứ 2: 1 cặp (cặp ban đầu chưa đẻ)
Tháng thứ 3: 2 cặp (đã có thêm cặp con)
Tháng thứ 4: 3 cặp (cặp đầu vẫn đẻ thêm)

Tháng thứ 5: 5 cặp (cặp con bắt đầu đẻ)
7
89 ứ
Tháng thứ2
Tháng thứ3
Tháng thứ 4
Tháng thứ 5
7

×