1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc dữ liệu lập trình đệ quy

13 445 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 15,14 MB

Nội dung

Môn: CẤU TRÚC DỮ LIỆU Chương 3: LẬP TRÌNH ĐỆ QUY ĐỆ QUY (Recursion) Định nghĩa: Phương pháp thiết kế giải thuật đệ quy : Phân loại đệ quy: ĐỆ QUY (Recursion) Định nghĩa:  Chương trình đệ quy chương trình gọi đến  Ví dụ: Một hàm đệ quy hàm định nghĩa dựa vào  Trong lý thuyết tin học, người ta thường dùng thủ thuật đệ quy để định nghĩa đối tượng  Ví dụ: Tên biến Pascal chuẩn định nghĩa sau: - Mỗi chữ tên - Nếu t tên biến t , t tên biến ĐỆ QUY (Recursion)   Định nghĩa: Một chương trình đệ quy định nghĩa đệ quy gọi đến mãi mà phải có điểm dừng đến trường hợp đặc biệt đó, mà ta gọi trường hợp suy biến (degenerate case) Ví dụ: Cho số tự nhiên n, ta định nghĩa n! sau:  n * (n - 1)! n! =   0!  ĐỆ QUY (Recursion) Phương pháp thiết kế giải thuật đệ quy :  Tham số hoá toán  Phân tích trường hợp chung (đưa toán dạng toán loại có phạm vi giải nhỏ theo nghiã tiến đến trường hợp suy biến)  Tìm trường hợp suy biến ĐỆ QUY (Recursion) Phương pháp thiết kế giải thuật đệ quy :  Ví dụ1: Lập hàm GT(n) = n! int GT(int n){ If (n==0) return 1; Else return n*GT(n-1); } ĐỆ QUY (Recursion) Phương pháp thiết kế giải thuật đệ quy :  Ví dụ2: Dãy số Fibonaci: F1 = F2 = 1; Fn = Fn-1 + F n-2 (n  3) int F(int n){ If (n==1||n==2) return 1; Else return F(n-1)+F(n-2); } ĐỆ QUY (Recursion)   Phương pháp thiết kế giải thuật đệ quy : Nhận xét: ◦ Thông thuờng thay sử dụng lời giải đệ quy cho toán, ta thay lời giải không đệ quy (khử đệ quy) phương pháp lặp ◦ Việc sử dụng giải thuật đệ quy có: Ưu điểm lợi cho việc biểu diễn toán Gọn (đối với chương trình) Khuyết điểm Thuận Có không tối ưu thời gian Có thể gây tốn nhớ ◦ Chính vậy, lập trình người ta cố tránh sử dụng thủ tục đệ quy thấy không cần thiết ĐỆ QUY (Recursion) Ví dụ 1: Viết thủ tục in xâu đảo ngược xâu X Cách 1: -Trường hợp chung: + In ký tự cuối xâu X + Đảo ngược phần lại -Trường hợp suy biến: Nếu xâu rỗng không làm hết void InNguoc(char*X){ If (X !=“”){ cout[...]...ĐỆ QUY (Recursion) Tham số hoá bài toán: HaNoi(n, A, B, C) // A, B, C: char Trong đó: n: Số đĩa A: Cọc nguồn cần chuyển đĩa đi B: Cọc trung gian C: Cọc đích để chuyển đĩa đến Chương trình chính như sau: void main(){ A= 'A'; B= 'B'; C= 'C'; HaNoi(3, A, B, C); } ĐỆ QUY (Recursion) Giải thuật đệ quy:  Trường hợp suy biến: Nếu n = 1 thì chuyển đĩa từ... Chuyển đĩa thứ nhất từ B sang C  Tổng quát: + Chuyển (n -1) đĩa từ A sang B (C làm trung gian) + Chuyển 1 đĩa từ A sang C (B: trung gian) + Chuyển (n -1) đĩa từ B sang C (A: trung gian) ĐỆ QUY (Recursion) Giải thuật đệ quy: void HaNoi(int n, char A, char B, char C){ If (n==1) cout ...ĐỆ QUY (Recursion) Định nghĩa: Phương pháp thiết kế giải thuật đệ quy : Phân loại đệ quy: ĐỆ QUY (Recursion) Định nghĩa:  Chương trình đệ quy chương trình gọi đến  Ví dụ: Một hàm đệ quy. .. thiết kế giải thuật đệ quy : Nhận xét: ◦ Thông thuờng thay sử dụng lời giải đệ quy cho toán, ta thay lời giải không đệ quy (khử đệ quy) phương pháp lặp ◦ Việc sử dụng giải thuật đệ quy có: Ưu điểm... pháp thiết kế giải thuật đệ quy :  Ví dụ2: Dãy số Fibonaci: F1 = F2 = 1; Fn = Fn-1 + F n-2 (n  3) int F(int n){ If (n==1||n==2) return 1; Else return F(n-1)+F(n-2); } ĐỆ QUY (Recursion)   Phương

Ngày đăng: 04/12/2015, 07:47

TỪ KHÓA LIÊN QUAN

w