1. Trang chủ
  2. » Sinh học

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 12: Khử đệ quy

10 30 0

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

THÔNG TIN TÀI LIỆU

 M ột phương pháp đơn giản để có thể kiểm soát được bộ nhớ c ủa những lời gọi chương trình con, sử dụng stack riêng để lưu các bi ến, địa chỉ cần thiết..  V ề mặt bản chất, gần giống[r]

(1)

Giảng viên: TS Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580

Email:

Cấu trúc liệu giải thuật

(2)

Bài 12 Khử đệ quy

Nội dung học: 12.1 Khái niệm chung

12.2 Khử đệ quy cho tốn tính giai thừa. 12.3 Khử đệ quy cho toán Fibonacci.

12.4 Khử đệ quy cho toán tháp Hanoi. 12.5 Khử đệ quy cho toán QuickSort.

Tham khảo:

1 Data structures and Algorithms Stacks.htm

2 Kyle Loudon Mastering Algorithms, Chapter Stacks and Queues

3 Elliz Horowitz – Fundamentals of Data Structures, Chapter Stacks and Queues

(3)

12.1 Khái niệm chung (1/7)

Đối với hệ điều hành, thơng thường, chương trình gọi, thực hiện:

1 Trước hết, hệ điều hành lưu tất thông tin cần thiết chương trình (thơng tin cần thiết)

2 Tiếp theo, chuẩn bị gọi chương trình chuyển quyền điều khiển cho chương trình

3 Sau đó, kết thúc chương trình con, hệ điều hành lấy lại thông tin lưu bước chuyển quyền điều khiển đến nơi gọi chương trình

(4)

12.1 Khái niệm chung (2/7)

Stack chương trình:

 Đối với ngơn ngữ bậc cao, sử dụng Stack chương trình cho lời gọi chương trình

 Như vậy, chương trình gọi, thơng tin mơi trường (tại nơi gọi chương trình con) đưa vào stack chương trình

 Khi quay trở lại nơi gọi chương trình con, thơng tin lấy lại từ stack chương trình

(5)

12.1 Khái niệm chung (3/7)

Sử dụng ghi dạng stack riêng:

 Một phương pháp đơn giản để kiểm sốt nhớ lời gọi chương trình con, sử dụng stack riêng để lưu biến, địa cần thiết

 Về mặt chất, gần giống với hệ thống, nhiên lưu trữ thơng tin cần thiết (khơng phải tồn thơng tin trước lời gọi chương trình con)

(6)

12.1 Khái niệm chung (4/7)

Với cách sử dụng Stack riêng, lưu ý:

 Sử dụng biến để lưu địa nơi gọi chương trình con.

 Với tham số dạng giá trị, tạo copy lưu.

 Với biến dạng tham chiếu, lưu trữ địa chúng.

(7)

12.1 Khái niệm chung (5/7)

Các bước gợi ý việc khử đệ quy tổng quát:

Có thể tạo stack riêng để chứa ghi Lệnh gọi đệ quy lệnh trả từ hàm đệ quy thay sau:

 Đưa vào stack ghi chứa biến cục bộ, tham số

vị trí dịng lệnh sau lệnh gọi đệ quy

 Gán tham số trị thích hợp

 Trở thực dòng lệnh giải thuật đệ quy

 Mỗi lệnh trả hàm đệ quy thay đổi:

 Lấy lại từ stack để phục hồi biến, tham số

(8)

12.1 Khái niệm chung (6/7)

Các bước gợi ý việc khử đệ quy đuôi:

1 Sử dụng biến để thay cho việc gọi đệ quy

2 Sử dụng vòng lặp với điều kiện kết thúc giống điều

kiện dừng đệ quy

3 Đặt tất lệnh vốn cần thực lần gọi đệ quy đuôi

vào vòng lặp

4 Thay lệnh gọi đệ quy phép gán

5 Dùng lệnh gán để gán trị tham số mà hàm đệ

quy lẽ nhận

(9)

12.1 Khái niệm chung (7/7)

Một số lưu ý sử dụng:

 Nếu tất tham số có kiểu:

Sử dụng nhiều thao tác push vào stack

Sau đó, sử dụng nhiều thao tác pop để phục hồi thông tin

 Nếu tham số có kiểu khác nhau:

Sử dụng cấu trúc hoặc,

(10)

12.2 Khử đệ quy cho tốn tính giai thừa(1/4)

Xét lại đoạn chương trình tính n!

long factorial(int n)

{

if((n==0)||(n==1)) return 1;

Ngày đăng: 09/03/2021, 07:53

Xem thêm:

TỪ KHÓA LIÊN QUAN