kỹ thuật lập trình,đặng bình phương,dhkhtnhcm Đệ qui Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 109 CHƯƠNG 9 ĐỆ QUI Giới thiệu phương pháp lập trình theo kỹ thuật đệ quy, phân loại, cách hoạt động và[.]
Đệ qui CHƯƠNG ĐỆ QUI Giới thiệu phương pháp lập trình theo kỹ thuật đệ quy, phân loại, cách hoạt động cách cài đặt hàm đệ quy I TÓM TẮT LÝ THUYẾT I.1 Khái niệm Một hàm gọi có tính đệ qui thân hàm có lệnh gọi lại c om cách tường minh hay tiềm ẩn I.2 Phân loại đệ qui ng • Đệ qui tuyến tính co • Đệ qui nhị phân • Đệ qui phi tuyến th Đệ qui tuyến tính g a an • Đệ qui hỗ tương du on Trong thân hàm có lời gọi hàm gọi lại cách tường minh cu u TenHam () { if (điều kiện dừng) { //Trả giá trị hay kết thúc công việc } //Thực số cơng việc (nếu có) TenHam (); //Thực số cơng việc (nếu có) } Ví dụ 1: Tính S (n) = + + + L + n Trước cài đặt hàm đệ qui ta xác định: - Điều kiện dừng: S(0) = - Qui tắc (cơng thức) tính: S(n) = S(n-1) + n Ta cài đặt hàm đệ qui sau: Giáo trình Bài Tập Kỹ Thuật Lập Trình CuuDuongThanCong.com Trang 109 https://fb.com/tailieudientucntt Đệ qui long TongS (int n) { if(n==0) return 0; return ( TongS(n-1) + n ); } Ví dụ 2: Tính P(n) = n! Trước cài đặt hàm đệ qui ta xác định: - Điều kiện dừng: P( 0) = 0! = - Qui tắc (cơng thức) tính: P(n) = P(n-1) * n b co ng long GiaiThua (int n) { if(n==0) return 1; return ( GiaiThua(n-1) * n ); } c om Ta cài đặt hàm đệ qui sau: Đệ qui nhị phân th minh an Trong thân hàm có hai lời gọi hàm gọi lại cách tường cu u du on g TenHam () { if (điều kiện dừng) { //Trả giá trị hay kết thúc công việc } //Thực số cơng việc (nếu có) TenHam (); //Giải vấn đề nhỏ //Thực số cơng việc (nếu có) TenHam (); //Giải vấn đề lại //Thực số cơng việc (nếu có) } Ví dụ 1: Tính số hạng thứ n dãy Fibonaci định nghĩa sau: f1 = f0 =1 ; fn = fn-1 + fn-2 ; (n>1) Trước cài đặt hàm đệ qui ta xác định: - Điều kiện dừng: f(0) = f(1) = Ta cài đặt hàm đệ qui sau: Giáo trình Bài Tập Kỹ Thuật Lập Trình CuuDuongThanCong.com Trang 110 https://fb.com/tailieudientucntt Đệ qui long Fibonaci (int n) { if(n==0 || n==1) return 1; return Fibonaci(n-1) + Fibonaci(n-2); } Ví dụ 2: Cho dãy số nguyên a gồm n phần tử có thứ tự tăng dần Tìm phần tử có giá trị x có xuất mảng không? Trước cài đặt hàm đệ qui ta xác định: - Điều kiện dừng: Tìm thấy x xét hết phần tử .c om - Giải thuật: Do dãy số có thứ tự tăng nên ta áp dụng cách tìm kiếm theo phương pháp nhị phân Ý tưởng phương pháp bước ta tiến hành so sánh x với phần tử nằm vị trí ng dãy để thu hẹp phạm vi tìm co Gọi: l: biên trái dãy (ban đầu l=0) an r: biên phải dãy (ban đầu r = n-1) m: vị trí (m = (l+r)/2) g È th l du on a[0] a[1] … m R È È a[(l+r)/2] … a[n-2] a[n-1] Thu hẹp dựa vào giá trị phần tử giữa, có hai trường hợp: cu u i Nếu x lớn phần tử x xuất bên phải vị trí (từ m+1 đến r) ii Ngược lại x nhỏ phần tử x xuất bên trái vị trí (từ l đến m-1) Quá trình thực gặp phần tử có giá trị x, xét hết phần tử Ta cài đặt hàm đệ qui sau: int TimNhiPhan(int a[], int l, int r, int x) { int m = (l+r)/2; if(l>r) return -1;// Không có phần tử x if(a[m]>x) return TimNhiPhan(a, l, m-1, x); if(a[m] 10 Tính S (n) = + 1.2 + 1.2.3 + L + 1.2.3K n , với n > 11 Tính S (n) = 12 + 2 + + L + n , với n ≥ với n > Giáo trình Bài Tập Kỹ Thuật Lập Trình CuuDuongThanCong.com Trang 116 https://fb.com/tailieudientucntt Đệ qui n với n > 12 Tính S (n) = + + + L + , 13 Tính S (n) = + 14 Tính P ( x, y ) = x y 15 Tính S (n) = + (1 + 2) + (1 + + 3) + L + (1 + + + L + n) , 1 + +L+ , 1+ 1+ + 1+ + +L+ n với n > với n > II.2 Bài tập luyện tập nâng cao Cho số nguyên dương n In biểu diễn nhị phân n 17 (*) Cài đặt minh hoạ toán tháp Hà Nội 18 (**) Cài đặt toán mã tuần 19 (**) Cài đặt toán tám hậu 20 (*) Tính S (n) = n + (n − 1) + (n − 2) + + , 21 (*) Tính S (n) = + + + + n , 22 (*) Tính S (n) = co ng c om 16 an 1 1+ th 1+ du on g 1+ O với n > với n > có n dấu phân số 1 1+ 1+1 Đệ qui cung cấp cho ta chế giải toán phức tạp cách đơn cu u III KẾT LUẬN giản Xây dựng hàm đệ qui thông qua việc xác định điều kiện dừng bước thực Chỉ nên cài đặt phương pháp đệ qui khơng cịn cách giải cách lặp thơng thường Giáo trình Bài Tập Kỹ Thuật Lập Trình CuuDuongThanCong.com Trang 117 https://fb.com/tailieudientucntt ... ta xác định: - Điều kiện dừng: f(0) = f(1) = Ta cài đặt hàm đệ qui sau: Giáo trình Bài Tập Kỹ Thuật Lập Trình CuuDuongThanCong.com Trang 110 https://fb.com/tailieudientucntt Đệ qui long Fibonaci... if(a[m]