Sáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎISáng kiến kinh nghiệm, SKKN - ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎI
SỞ GIÁO DỤC VÀ ĐÀO TẠO QUẢNG TRỊ TRƯỜNG THPT HƯỚNG HÓA SÁNG KIẾN KINH NGHIỆM Tên đề tài: ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎI HỌ VÀ TÊN GIÁO VIÊN: NGUYỄN TIẾN LONG TỔ TIN HỌC TRƯỜNG THPT HƯỚNG HĨA Hướng Hóa, Tháng năm 2020 MỤC LỤC PHẦN I ĐẶT VẤN ĐỀ LÝ DO CHỌN ĐỀ TÀI MỤC ĐÍCH NGHIÊN CỨU ĐỐI TƯỢNG NGHIÊN CỨU ĐỐI TƯỢNG KHẢO SÁT, THỰC NGHIỆM 5 PHƯƠNG PHÁP NGHIÊN CỨU PHẠM VI VÀ THỜI GIAN NGHIÊN CỨU PHẦN II NỘI DUNG .6 THUẬT TOÁN ĐỆ QUY 1.1 Khái niệm .6 1.2 Phân loại 1.3 Thuật toán đệ quy 1.4 Chương trình đệ quy 11 1.4.1 Hàm đệ quy .11 1.4.2 Thủ tục đệ quy 11 1.5 Các bước xây dựng chương trình đệ quy .12 1.6 Cơ chế thực thuật toán đệ quy .13 1.7 Một số toán đệ quy .15 1.7.1 Bài toán tháp Hà Nội 15 1.7.2 Bài toán chia thưởng 18 1.7.3 Bài toán xếp mảng – Thuật toán xếp nhanh 20 1.7.4 Bài tốn tìm kiếm – Thuật tốn tìm kiếm nhị phân 24 KỸ THUẬT KHỬ ĐỆ QUY .27 2.1 Lý sử dụng kỹ thuật khử đệ quy .27 2.2 Một số kỹ thuật khử đệ quy đơn giản 28 2.3 Khử số dạng đệ quy thường gặp 28 2.4 Nhận xét chung kỹ thuật khử đệ quy .31 PHẦN III KẾT LUẬN VÀ KIẾN NGHỊ 32 I KẾT LUẬN .32 II KIẾN NGHỊ 32 TÀI LIỆU THAM KHẢO 33 PHẦN I ĐẶT VẤN ĐỀ LÝ DO CHỌN ĐỀ TÀI Việc nâng cao chất lượng giáo dục mũi nhọn vấn đề cấp thiết nhà trường toàn ngành giáo dục tỉnh nhà đặc biệt quan tâm, trọng Bồi dưỡng học sinh giỏi nhiệm vụ quan trọng thiếu ngành giáo dục nói chung trường nói riêng đặc biệt giáo viên tham gia bồi dưỡng nhiệm vụ không dễ dàng Bồi dưỡng học sinh giỏi q trình, khơng thể hai, mà phải có tính chiến lược dài suốt q trình, một, hai ba năm học Chỉ có q trình cung cấp tương đối đầy đủ kiến thức cần thiết cho học sinh phát xác khả học tập em, từ thành lập đội tuyển tham dự kỳ thi học sinh giỏi cấp đạt kết mong đợi Các nội dung liên quan đến đệ quy, khử đệ quy, hay đệ quy quay lui nội dung việc giảng dạy, dễ dàng tìm thấy tài liệu tham khảo liên quan, chưa có tài liệu đầy đủ, chi tiết, tập đa dạng phong phú để giáo viên em học sinh hiểu toàn kiến thức liên quan Phần tập đệ quy- khử đệ quy phần tập khó thường chiếm phần điểm đề thi học sinh giỏi, phần có số dạng phương pháp giải phong phú Mặt khác tập đệ quy gây nhiều hứng thú gặp vấn đề khó giải khơng hiểu tường tận Với lý qua thực tiễn giảng dạy nhiều năm, tìm hiểu nghiên cứu, tham khảo tài liệu xây dựng nên đề tài: “ỨNG DỤNG THUẬT TOÁN ĐỆ QUY - KHỬ ĐỆ QUY TRONG GIẢNG DẠY BỒI DƯỠNG HỌC SINH GIỎI” nhằm giúp cho giáo viên bồi dưỡng học sinh giỏi giúp em học sinh giỏi có kinh nghiệm việc áp dụng thuật tốn đệ quy để lập trình cho tốn MỤC ĐÍCH NGHIÊN CỨU Nhằm giúp giáo viên học sinh đứng trước toán, xác định tốn áp dụng thuật tốn đệ quy hay khơng? Và cách giải cụ thể nào? Từ tơi đề mục đích, nhiệm vụ việc thực đề tài sau: - Giới thiệu khái niệm “thuật toán đệ quy”, giới thiệu khái niệm đệ quy, chương trình đệ quy, bước xây dựng chương trình đệ quy chế thực thuật toán đệ quy số tốn đệ quy điển hình - Giới thiệu kỹ thuật khử đệ quy ĐỐI TƯỢNG NGHIÊN CỨU Sáng kiến “Ứng dụng thuật toán đệ quy – khử đệ quy giảng dạy bồi dưỡng học sinh giỏi” có đối tượng nghiên cứu tốn giải thuật toán đệ quy Nội dung đề tài sử dụng ngơn ngữ lập trình C++ để giải toán ĐỐI TƯỢNG KHẢO SÁT, THỰC NGHIỆM Đề tài lấy đối tượng khảo sát, thực nghiệm học sinh giỏi mơn Tin học trường THPT Hướng Hóa mà thân trực tiếp giảng dạy PHƯƠNG PHÁP NGHIÊN CỨU Chủ yếu nghiên cứu đề tài, tham khảo tài liệu, ý kiến đóng góp đồng nghiệp đặc biệt đúc rút kinh nghiệm qua thực tiễn giảng dạy PHẠM VI VÀ THỜI GIAN NGHIÊN CỨU Trong khuôn khổ đề tài sáng kiến khái quát nội dung lý thuyết giải số tập ứng dụng thuật giải đệ quy – khử đệ quy Đề tài nghiên cứu trình học tập giảng dạy, bồi dưỡng đội tuyển học sinh giỏi, giới hạn thời gian nghiên cứu năm học: năm học 2018 2019 2019 - 2020 PHẦN II NỘI DUNG THUẬT TOÁN ĐỆ QUY 1.1 Khái niệm Đệ quy khái niệm toán học khoa học máy tính Một đối tượng gọi đệ quy phần định nghĩa thơng qua khái niệm Ví dụ 1: Định nghĩa số tự nhiên đệ quy sau: số tự nhiên Nếu k số tự nhiên k+1 số tự nhiên Theo đó, ta có = +1 số tự nhiên, = 1+1 số tự nhiên, … Cứ ta định nghĩa số tự nhiên khác lớn Do đó, số tự nhiên khái niệm mang chất đệ quy Ví dụ 2: Định nghĩa xâu kí tự đệ quy sau: - Xâu rỗng xâu kí tự - Một kí tự ghép với xâu kí tự tạo thành xâu Thuật tốn đệ quy đóng vai trị quan trọng việc giải nhiều toán Một thuật toán đệ quy thuật tốn có u cầu thực lại thuật tốn với mức độ liệu nhỏ Trong lĩnh vực lập trình, chương trình máy tính gọi đệ quy chương trình có lời gọi Nhưng chương trình khơng thể gọi nó, tạo vịng lặp vơ hạn Do đó, chương trình đệ quy trước gọi lại có thao tác kiểm tra điều kiện dừng Nếu điều kiện dừng thỏa mãn trình gọi đệ quy chấm dứt Nhìn chung, chương trình đệ quy có đặc điểm sau: - Chương trình gọi lại nó, mục đích giải vấn đề tương tự phạm vi nhỏ - Vấn đề nhỏ lúc đơn giản tới mức chương trình tự giải mà khơng cần gọi tới nữa, chương trình đệ quy kết thúc Mơ tả thuật toán đệ quy gồm phần: - Phần neo (phần sở/phần dừng): mô tả trường hợp suy biến (cá biệt) đối tượng qua thao tác cụ thể xác định - Phần quy nạp (phần đệ quy): mô tả đối tượng thơng qua đối tượng cách trực tiếp gián tiếp Ví dụ 3: Xét tốn tính n! (Với n số ngun bất kỳ) Ta có: n! = n(n-1)! Do ta mơ tả tốn dạng đệ quy sau: n! = n( n-1)! { n=0 n>0 Với toán ta xác định : - Phần neo : n = n! = - Phần quy nạp : Khi n>0 n ! = n(n-1) ! Ví dụ 4: Định nghĩa số Fibonacci sau : Fn = { n=0∨n=1 F n-1 +F n-2 n>1 Hãy tính Fn với n cho trước Với tốn ta xác định : - Phần neo: n = n = Fn = - Phần quy nạp: n>1 Fn = Fn-1 +Fn-2 Ưu điểm phương pháp mơ tả đệ quy: thực số lượng lớn thao tác tính tốn thơng qua thuật tốn ngắn gọn, đơn giản (Mơ tả tốn lớn qua số thao tác) Hạn chế: Tốn nhớ (nếu quản lý khơng tốt gây tràn nhớ) thời gian thực Ví dụ : Thuật toán đệ quy sử dụng định nghĩa đệ quy số Fibonacci ví dụ sau: int F(int n) { if (n0) Khi đó, mơ hình tổng qt thuật tốn đệ quy có dạng sau: P(n) ¿ if (n>0) P[S, P(n-1)] P(n) ¿ P[S, if (n>0) P(n1)] Một số dạng thuật toán đệ quy đơn giản thường gặp: - Đệ quy tuyến tính: + Một hàm gọi đệ quy tuyến tính bên thân hàm có lời gọi hàm lại cách trực tiếp (tường minh) + Là dạng đệ quy trực tiếp đơn giản có dạng sau: P ¿ {if(điều kiện dừng) thực S; else { thực hiên S*; gọi P; } } Với S, S* thao tác không đệ quy Ví dụ: Tính tổng chữ số số ngun dương n Ta phân tích tốn dạng đệ quy sau: Gọi Tong(n) tổng chữ số số nguyên dương n Ta có: Tong(n) ¿ { if(n=0) Tong = 0; else Tong=Tong(n / 10) +(n % 10); } Trong đó: P Tong(n), S lệnh gán Tong = 0, S* lệnh rỗng Viết hàm ngôn ngữ C++: int TCS(int n) { if (n==0) return 0; else return (n % 10)+ TCS(n / 10); } - Đệ quy nhị phân : + Một hàm gọi đệ quy nhị phân bên thân hàm có hai lời gọi hàm lại cách trực tiếp có dạng sau: P ¿ {if(điều kiện dừng) thực S; else { thực hiên S*; gọi P; gọi P; } } Với S, S* thao tác không đệ quy Ví dụ: Hàm Fibo tính số hạng thứ n dãy Fibonacci Ta phân tích tốn dạng đệ quy sau: Gọi Fibo(n) số hạng thứ n dãy Fibonacci Ta có: Fibo(n) ¿ {if((n==0)||(n==1)) Fibo=1; else Fibo=(Fibo(n-1)+Fibo(n-2)); } Trong đó: P Fibo(n), S lệnh gán Fibo = 1, S* lệnh rỗng Viết hàm ngơn ngữ lập trình C++: int F(int n) { if (n==0) || (n==1) return 1; else return F(n-1)+F(n-2); } - Đệ quy phi tuyến Là dạng đệ quy trực tiếp mà lời gọi đệ quy thực bên vịng lặp có dạng sau: P ¿ {if(điều kiện dừng) thực S; else for (i=chỉ số đầu;i