Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
564 KB
Nội dung
Chương I: Giải thuật đệ quy 10/11/22 Giải thuật đệ quy Khái niệm đệ quy Giải thuật đệ quy thủ tục đệ quy Ví dụ thủ tục đệ quy Hiệu lực đệ quy 10/11/22 Khái niệm đệ quy Một đối tượng gọi đệ quy bao gồm phận định nghĩa dạng Ví dụ: Số tự nhiên - số tự nhiên - x số tự nhiên x-1 số tự nhiên Hàm n giai thừa: n! - 0!=1; - n!=n*(n-1)! Nếu n>0; 10/11/22 Giải thuật đệ quy Giải thuật đệ quy: Nếu lời giải toán T thực lời giải tốn T’ giống T gọi lời giải đệ quy Thủ tục đệ quy: thường có phần - Phần neo (trường hợp suy biến): Có thể giải trực tiếp - Phần đệ quy: chưa thể giải trực tiếp mà gọi đến tốn giống 10/11/22 Thủ tục đệ quy Phân loại thủ tục đệ quy: Thủ tục trực tiếp: thân thủ tục chứa lời gọi tới Thủ tục gián tiếp: thân thủ tục chứa lời gọi tới thủ tục khác mà thủ tục gọi tới (ABA) 10/11/22 Thủ tục đệ quy (tiếp) Các đặc điểm thủ tục đệ quy trực tiếp: Tồn trường hợp suy biến gọi giá trị neo làm kết thúc giải thuật đệ quy Trong thân thủ tục chứa lời gọi tới Sau lần gọi dần tới trường hợp suy biến 10/11/22 Thủ tục đệ quy (tiếp) Cách thực thủ tục đệ quy trực tiếp: Chương trình gọi thủ tục đệ quy đệ quy mức Thủ tục đệ quy gọi tới nó đệ quy mức Ở mức thứ i, thực phần mức thứ i kiểm tra điều kiện suy biến 10/11/22 Thủ tục đệ quy (tiếp) Ví dụ cách thực hiện: Procedure aaa(n:integer); Begin if n2 a, viết thủ tục đệ quy xác định giá trị phần tử thứ n dãy b, viết thủ tục lặp xác định giá trị phần tử thứ n dãy 10/11/22 20 Bài tập Bài 3: Đưa định nghĩa đệ quy viết giải thuật đệ quy tính: a) Tổng n số nguyên dương b) an (với a n số nguyên dương) 10/11/22 21 Bài tập Bài 4: Viết thủ tục đệ quy nhằm in tất hoán vị n phần tử dãy số a = {a1,a2,…,an} Ví dụ:n=3, a1=1, a2=2,a3=3;thì in ra: 123; 132; 213; 231; 312; 321; (Gợi ý: để ý nhận xét: 123 132 231 213 312 321 10/11/22 22 Lời giải a) Định nghĩa ước số chung lớn hai số (m>=n) UCLN(m,n) = n m chia hết cho n UCLN (q,r) m không chia hết cho n (r phần dư m chia cho n ) b) Chương trình: int UCLN(int a, int b){ int r=a%b; if (r==0){ return b; }else{ return UCLN(b,r); } } 10/11/22 23