Cách tìm USCLN của hai số theo phương pháp đệ quy như sau: - Trường hợp suy biến:
USCLN(a,b) = a nếu a = b - Trường hợp tổng quát:
USCLN(a,b) = USCLN(a,b-a) nếu a<b
Với định nghĩa trên ta có thể viết hàm đệ quy tính USC(a,b) như sau: int USCLN(int a, int b)
{ if (a == b) return a; else if (a > b) return (USCLN(a-b,b)); else return (USCLN(a,b-a)); } 5. Khử đệ quy:
CÂU HỎI ÔN TẬP VÀ BÀI TẬP CUỐI CHƯƠNGĐã bổ sung Đã bổ sung
Bài 1: Lập thuật toán tính tổng tất cả các số nguyên trong một danh sách các số cho trước
Bài 2: Liệt kê các bước cần tiến hành để tìm số 2 trong danh sách sau 1, 2, 5, 9, 13 khi dùng a. Thuật toán tìm kiếm tuyến tính
b. Thuật toán tìm kiếm nhị phân.
Bài 3: Mô tả thuật toán tìm phần tử nhỏ thứ nhất và phần tử nhỏ thứ hai trong một bảng liệt kê các số nguyên. Số phép so sánh cần dùng trong thuật toán là bao nhiêu.
Bài 4: Mô tả thuật toán chèn một số nguyên x vào vị trí thích hợp trong dãy n số nguyên đã được sắp xếp theo thứ tự giảm dần
Bài 5: Mô tả thuật toán xác định tất cả các vị trí xuất hiện của một số nguyên trong một bảng liệt kê các số nguyên được sắp xếp theo thứ tự giảm dần. Hỏi có bao nhiêu phép so sánh được dùng trong thuật toán đó.
Bài 6: Viết thuật toán sắp 4 số hạng đầu tiên của một dãy có chiều dài tuỳ ý theo thứ tự tăng dần. Chứng minh rằng thuật toán này có độ phức tạp theo thời gian là O(1) được tính qua số các phép so sánh được sử dụng..
Bài 7: Giả sử một phần tử đã biết có mặt trong 4 số hạng đầu tiên của một bảng liệt lê gồm 32 số hạng. Hỏi thuật toán tìm kiếm tuyến tính hay thuật toán tìm kiếm nhị phân tìm ra vị trí của phần tử đó nhanh hơn.
Bài 8: Hãy định nghĩa đệ quy của dãy {an} với n =1, 2, ... nếu a. an = 4n -2
b. an = 2n +2 c. an = n(n+1) d. an = n2
Bài 9: Cho F(n) là tổng của n số nguyên dương đầu tiên. Hãy đưa ra định nghĩa đệ quy của hàm F(n)
Bài 10: Hãy biểu diễn thuật toán tìm kiếm tuyến tính như một thủ tục đệ quy