Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 54 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
54
Dung lượng
225 KB
Nội dung
Nguyễn Thị Minh Lập trình đệ qui Lời nói đầu Đệ qui khái niệm tồn sống, toán học, lập trình Một đối tợng đệ qui bao gồm nh phận đợc định nghĩa dới dạng Một chơng trình đệ qui tin học đợc định nghĩa nh thế, có nghĩa chơng trình thực lại gọi đến Khả đệ qui ngôn ngữ lập trình điểm mạnh mà ngời lập trình cần khai thác Mặc dù số tình huống, việc cài đặt đệ qui tỏ hiệu việc sử dụng nhớ nh thời gian thực chơng trình (vấn đề đợc nói rõ chơng 1) nhng số tình khác, việc cài đặt đệ qui lại tỏ hiệu quả, đặc biệt việc tiết kiệm công sức lập trình (chẳng hạn toán tháp Hà Nội đợc giới thiệu chơng 2) Khéo dùng đệ qui ta tận dụng đợc cách giải qui nạp toán học để cài đặt chơng trình lời giải đệ qui đơn giản, mà không dùng ta nhiều công sức Hiện nay, có nhiều giải thuật đợc cài đặt đệ qui nh Quick-sort, quay lui Với vai trò quan trọng mạnh mẽ công cụ đệ qui trình lập trình, lựa chọn đề tài " Lập trình đệ qui" với mục đích nghiên cứu sâu vấn đề liên quan đến chơng trình đệ qui giúp cho ngời lập trình có hớng suy nghĩ việc sử dụng công cụ đệ qui giải toán thực tế (đặc biệt toán toán học) nhằm tìm lời giải dễ dàng Đề tài đợc hoàn thành ngôn ngữ Delphi Để thiết kế chơng trình đệ qui, trớc hết ta phải biết đợc khái niệm chơng trình đệ qui, cấu trúc bớc để giải toán đệ qui Đặc biệt phải biết chọn lựa toán giải phơng pháp đệ qui Và có câu hỏi đặt liệu có khử đợc tính đệ qui chơng trình đệ qui hay không, có cách Đồng thời để chơng trình chạy thông suốt bạn cần phải biết lỗi lập trình để tránh Vì thế, đề tài đợc chia thành chơng phụ lục sau: Chơng : Chơng trình đệ qui Ngoài việc đa khái niệm đệ qui, chơng trình đệ qui, chơng đề cập đến khía cạnh khác chơng trình đệ qui nh: cấu Nguyễn Thị Minh Lập trình đệ qui trúc, bớc để giải toán đệ qui, toán giải phơng pháp đệ qui Đặc biệt trình bày chi tiết Stack việc cài đặt thủ tục (hoặc hàm) đệ qui, chứng minh tính đắn hiệu suất thuật toán đệ qui Chơng : Một số vấn đề liên quan đến chơng trình đệ qui Bên cạnh giới thiệu loại đệ qui, chơng giới thiệu phơng pháp khử đệ qui, số ứng dụng phơng pháp đệ qui Đồng thời đa số lỗi lập trình chung thờng gặp cách khắc phục Phụ lục 1: Bài tập Chơng nhằm đa tập lập trình đệ qui, hầu hết tập có lời giải mẫu Phần giúp làm quen với việc viết chơng trình đệ qui Đồng thời với tập nhỏ ứng dụng vào việc giải số toán lớn Phụ lục : Bài tập luyện lập trình Các tập chơng giúp luyện lập trình qua bạn thấy đợc u điểm chơng trình đệ qui Chơng tập có lời giải giới thiệu số toán cha có lời giải mà giải phơng pháp đệ qui Từ việc tổng hợp tài liệu tiếng Anh tiếng Việt có liên quan đến đề tài, việc tham khảo ý kiến ngời có kinh nghiệm, đặc biệt hớng dẫn thầy giáo Nguyễn Trung Hoà viết nên đề tài Trong khuôn khổ khoá luận tốt nghiệp, đề tài dừng lại số tập đơn giản cha nghiên cứu sâu vào lớp toán cụ thể Để làm đợc điều cần phải có thời gian lâu dài đầu t thoả đáng Đề tài đợc hoàn thành cố gắng thân, có giúp đỡ lớn tận tình thầy giáo Nguyễn Trung Hoà, thầy cô giáo khoa Công nghệ thông tin tập thể lớp 41A Chắc chắn đề tài nhiều thiếu sót, mong đợc thầy cô bạn góp ý Em xin ghi nhận ý kiến đóng góp quý báu tất thầy cô giáo bạn Em xin chân thành cảm ơn Nguyễn Thị Minh Lập trình đệ qui Chơng chơng trình đệ qui 1.1.Mở đầu 1.2.Những đặc điểm chơng trình đệ qui hớng giải 1.2.1 Khái niệm chơng trình đệ qui 1.2.2 Cấu trúc chơng trình đệ qui 1.2.3 Những bớc để giải toán đệ qui 1.2.4 Bài toán dùng đệ qui .6 1.3.Stack chơng trình đệ qui .6 1.3.1 Định nghĩa Stack 1.3.2 Stack việc cài đặt thủ tục (hàm) đệ qui 1.4.Tính đắn hiệu suất thuật toán đệ qui 1.4.1 Tính đắn 1.4.2 Ưu điểm chơng trình đệ qui 1.4.3 Hiệu suất thuật toán đệ qui Chơng Một số vấn đề liên quan đến chơng trình đệ qui 2.1.Các loại đệ qui 12 2.1.1 Đệ qui đuôi 12 2.1.2 Đệ qui nhánh 12 2.1.3 Đệ qui tơng hỗ .13 2.2.Khử đệ qui .13 Nguyễn Thị Minh Lập trình đệ qui 2.2.1 Khử đệ qui vòng lặp .13 2.2.2 Khử đệ qui Stack tự tạo 15 2.3.Một số ứng dụng chơng trình đệ qui 16 2.3.1 Bài toán Tháp Hà Nội 16 2.3.2 Tìm kiếm nhị phân 17 2.3.3 Chơng trình đệ qui tham số kiểu mảng 18 2.3.4 Bài toán xếp mảng theo kiểu phân đoạn 20 2.3.5 Phép duyệt nhị phân .21 2.3.6 Thuật toán quay lui .21 2.4.Những thuật toán đệ qui gỡ rối .24 2.5.Những lỗi lập trình chung .25 2.5.1 Truyền theo trị theo biến 30 2.5.2 Cấp phát nhớ Phụ lục 1: Bài tập Phụ lục 2: Bài tập luyện lập trình Chơng I Chơng trình đệ quy 1.1 Mở đầu Nguyễn Thị Minh Lập trình đệ qui Một thủ tục (hàm) đệ qui chơng trình tự gọi Tuy nhiên tham số qua lần gọi khác Mặc dầu nhiều toán giải phơng pháp lặp nhng giải thuật đệ qui dành cho có vai trò quan trọng Làm cho việc trình bày đợc gọn gàng, đơn giản Trong phần mô tả đệ qui với hàm đơn giản khái quát thành qui tắc để viết modul đệ qui từ ví dụ sau Ví dụ: Xem xét trình giải máy tính thực phép tính: nhân 3, với giả thiết máy tính cộng nhng nhân Gọi toán T: nhân Lúc toán T đợc phân tích thành toán: T1 = nhân T2 = kết T1+6 Do giả thiết máy tính cộng nên giải toán T nhng giải toán T1 Nhng T1 so với T đơn giản Ta tiếp tục phân tích toán T1 thành toán T11 = nhân T12 = Kết T11+6 Vậy toán T đợc phân tích thành toán T11: nhân 1, T12: Kết T11+6 T2 : Kết T12+6 Mặc dù máy tính thực phép nhân nhng ta lập trình cho để biết rằng: Kết phép nhân số với Do vậy, kết T11=6, T12=6+6=12, T2= 12+6 Qua ví dụ ta khái quát phép tính M nhân N nh sau: Nếu N=1 Multiphy:=M Ngợc lại Multiphy:=M+ Multiphy(M,N-1) Cài đặt hàm đệ qui sau: Function Multiphy (M,N: integer): integer; {Hàm thực M nhân N} Begin if N=1 then Multiphy:=M { phần neo} else Multiphy:=M+ Multiphy(M,N-1); {phần đệ qui} Nguyễn Thị Minh Lập trình đệ qui End; ví dụ trên, toán gốc T : M nhân N đợc tách thành toán T1 = M nhân (N-1) T2 = Kết T1 +M Để giải toán này, phải gọi lại Multiphy với đối số thứ N1 Nếu lần gọi mà tham số thứ lớn tiếp tục gọi lại hàm Multiphy Chúng ta gọi trờng hợp (N>1) bớc đệ qui chứa lệnh gọi đến hàm Multiphy với đối số thứ nhỏ Chú ý: Trong cách sử dụng khác định danh Multiphy bớc đệ qui ví dụ Một cách sử dụng mà không chứa tham số xác định kết hàm, cách sử dụng lại dùng để gọi lại hàm cách đệ qui Khi N=1, thực câu lệnh Multiphy:=M trờng hợp gọi phần neo (hay phần cố định) Chúng ta mô tả trình máy tính thực Multiphy(6,3) sơ đồ sau: 12 Multiphy(6,3) M N 3=1 false12 Multiphy:= + Multiphy(6,2) Return Gọi đệ qui lần M Gọi đệ qui lần N 6 M 2=1 false N Multiphy:= + 1=1 true Multiphy(6,1) Multiphy:= Return Khi tham trỏ Multiphy(6,3) đợc gọi để tính nhân 3, phần đệ qui tạo Return tham trỏ khác, Multiphy(6,2) Tham trỏ thứ tạo tham trỏ khác Nguyễn Thị Minh Lập trình đệ qui Multiphy(6,1), tham trỏ cuối Vì điều kiện phần neo đợc thoả mãn, tham trỏ không đợc tạo Giá trị đợc trả cho Multiphy(6,1) đợc dùng để tính Multiphy(6,2) tiếp tục lên giá trị 18 đợc trả nh giá trị tham trỏ ban đầu Từ ta có khái niệm đệ qui nh sau: Ta nói đối tợng đợc xác định đệ qui đợc xác định thông qua nh phận VD1 Hàm tính n giai thừa (n !) 0! =1 Nếu n>0 n! = n* (n-1)! Một điều cần nói thêm : Về mặt định nghĩa, công cụ đệ qui cho phép xác định tập vô hạn đối tợng phát biểu hữu hạn Ta thấy vai trò công cụ định nghĩa toán học, đại số đại cơng, văn phạm VD2 Hàm f đợc định nghĩa đệ qui f(0) = , f(n) = 2f(n-1) +3 VD3 Tập hợp S đợc định nghĩa đệ qui S, x + y S x, y thuộc S VD4 Biểu thức gồm biến, số toán tử +, - ,*, / , đợc kết hợp với theo qui tắc Biểu thức đợc tạo đợc định nghĩa nh sau : x biểu thức qui tắc x số hay biến (f + g), (f-g), f*g, f/g , f g biểu thức qui tắc f , g biểu thức qui tắc 1.2 đặc điểm ch ơng trình đệ qui h ớng giải 1.2.1 Khái niệm chơng trình đệ qui Một chơng trình (hàm thủ tục) đợc gọi đệ qui trình thực có phần phải gọi đến 1.2.2 Cấu trúc chơng trình đệ qui Một chơng trình đệ qui gồm phần : Nguyễn Thị Minh Lập trình đệ qui a) Phần cố định ( phần neo ) chứa tác động hàm thủ tục với số giá trị cụ thể ban đầu tham số b) Phần hạ bậc (phần đệ qui ) tác động cần đợc thực cho giá trị thời tham số đợc định nghĩa tác động đợc định nghĩa trớc với kích thớc nhỏ tham số VD1 Hàm đệ qui GT(n) tính n giai thừa Từ định nghĩa hàm tính giai thừa ta viết lại nh sau: Nếu n=0 GT =1 Ngợc lại, GT = n *GT(n-1) Hàm đệ qui ( A recursive function ) Function GT(n : integer) : real; Begin if n=0 then GT :=1 { Phần cố định } else GT := n* GT(n-1); { Phần hạ bậc } End; (Chú ý : Khi ta khai báo GT trả kiểu integer ( số sách thờng viết ) bị hạn chế : tính với n < với n >= GT mang giá trị lớn 32767 giới hạn số nguyên ) 1.2.3 Những bớc để giải toán đệ qui Hiểu toán Xác định trờng hợp suy biến Xác định bớc đệ qui Thuật toán đệ qui thờng dùng câu lệnh: IF THEN ELSE VD1 Viết hàm đệ qui tính a mũ n (an) Nh biết hàm a mũ n đợc xác định nh sau : a0=1 Nếu n > an = a*a(n-1) Với cách xác định hàm a mũ n Với n = ta có a0 =1 trờng hợp suy biến Nguyễn Thị Minh Lập trình đệ qui Với n > ta có an = a*a(n-1) , an đợc định nghĩa qua a(n-1), trờng hợp đệ qui Hay: Nếu n=0 mu :=1 ngợc lại, mu:= a* mu(n-1) Hàm đệ qui : Function mu(n:integer) : integer; Begin { phần cố định} if n=1 then mu:=1 else mu:= a*mu(n-1); { phần hạ bậc } End VD2 Xét thủ tục đệ qui đọc xâu kí tự có độ dài n in ngợc xâu Thủ tục đệ qui (A recursive procedure) Procedure Reverse(N:integer); Var next:char; Begin if N=1 then begin read(next); write(next); end Else begin read(next); reverse(n-1); write(next); end; End; Nếu gọi thủ tục lệnh Reverve(5), nhập kí tự hình xuất thứ tự ngợc lại Chẳng hạn nhập : abcde - edcba Còn bạn gọi Reverse (3) đợc nhập kí tự hình ta thấy đợc thứ tự ngợc lại kí tự Chẳng hạn nhập abc- cba Giống nh hầu hết thủ tục đệ qui, thân thủ tục Reverse chứa câu lệnh IF mà ớc lợng (đánh giá ) điều kiện kết thúc Khi điều kiện suy biến (trờng hợp suy biến - xâu có độ dài 1) toán đa tr- Nguyễn Thị Minh Lập trình đệ qui ờng hợp ngừng, câu lệnh read write đợc thực Khi điều kiên thúc sai (N>1), bớc đệ qui (phần sau else) đợc thực câu lệnh read để nhập kí tự đợc thực Câu lệnh gọi thủ tục Reverse(N-1) gọi thủ tục cách đệ qui, giá trị tham số giảm Kí tự đợc nhập không đợc lúc này, câu lệnh write nằm sau lời gọi Reverse(n-1) Tiếp theo, câu lệnh write cha đợc thực thủ tục cuối đợc hoàn thành quay lại câu lệnh write Với ví dụ kí tự đợc nhập n=3 không đợc lời gọi thủ tục với n=2 đợc thực Vì vậy, kí tự đợc thủ tục gọi với n=2, n=1 đợc thực Để hiểu nh vậy, theo dõi trình thc câu lệnh Reserse(3); Quá trình đợc hình sau giả thiết chữ abc đợc nhập vào Reserve (3); N=3 3n then UCLN:= UCLN(m-n,n) else UCLN:=UCLN(m,n-m); End; Bài Viết hàm đệ qui thực : 1.Tính n!! n!! = 1.3.5 n n lẻ n!! = 2.4.6 n n chẵn 2.Tính 1.1! +2.2!+ + n.n! 3.Tính 1/2! +2/3! + + n/(n+1)! {======= Ham tinh n!! =================} Function cau1(n:integer):integer; {* * * * * * * * * * * * * * * * * *} Function le(n:integer):integer; Begin if n=1 then le:=1 else le:=le(n-2)*n; End; {* * * * * * * * * * * * * * * * * * * } Function chan(n:integer):integer; Begin if n=2 then chan:=2 else chan:=chan(n-2)*n; End; {************************} Begin if n mod = then cau1:= chan(n) else cau1:=le(n); End; {===== Ham tinh giai thua n!====} Function GT(n:integer):real; Begin if n=1 then GT:=1 else GT := n* GT(n-1); End; 42 Nguyễn Thị Minh Lập trình đệ qui {=====2 Ham tinh 1/2! +2/3!+ +n/(n+1)!==} Function cau1(n:integer):real; Begin if n=1 then cau1:=1/GT(2) else cau1:= cau1(n-1) + n/GT(n+1); End; {====3 Ham tinh 1.1!+ 2.2! + + n.n!===} Function cau1(n:integer):real; Begin if n=1 then cau1:=1 else cau1:=cau1(n-1) + n*GT(n); End; Bài Đếm số từ có xâu nhập từ bàn phím {======= Ham dem tu xau ==========} Function dem_tu(st:string; n:integer):integer; Begin if n0, chi so cuoi la c ==} Function doixung(var b:mang;d, c:integer):boolean; Begin if (c-d=0) then doixung:=(b[d]=b[c]) else doixung:= (doixung(b,d+1,c-1) and (b[d]=b[c])); End; Bài 11 Viết chơng trình đệ qui tính sinx sin(x) = x - x3/3! + x5/5! + + (-1)n x2n+1/(2n+1)! Với độ xác 0.0001 Bài toán cách giải hoàn toàn giống cách tính ex 43 Nguyễn Thị Minh Lập trình đệ qui Bài 12 Viết hàm đệ qui kiểm tra xem số nguyên dơng n nhập từ bàn phím có phải số hoàn thiện hay không {==== Ham de qui kiem tra n la so hoan thien ====} Function hoan_thien(n: integer):boolean; Function tong(i:integer):integer; Begin if i=0 then tong:=0 else if n mod i =0 then tong:= i + tong(i-1) else tong := tong (i-1); End; Begin if n= tong(n-1) then hoan_thien:= true else hoan_thien := false; End; Bài 13 Viết chơng trình đệ qui kiểm tra số nguyên dơng n có phải số nguyên tố hay không {=== Ham de qui kiem tra n co la so nguyen to hay khong ? ==} Function kt(i:integer):boolean; Begin if ((i=1) or (i=0)) then kt:= true else kt := ( n mod i 0 ) and kt(i-1); End; {== Loi goi ham chơng trinh chinh la : kt(n-1) } Bài phím Phụ lục Bài tập luyện lập trình Viết chơng trình đệ qui tính giá trị đa thức P(x), với x nhập từ bàn x P(x) = x2 + x2 + 44 x2 + 256 x2 Nguyễn Thị Minh Lập trình đệ qui {=== ham tinh gia tri bieu thuc=======} Function cau(x:real):real; {* * * * * * * * * * * * * * * ** * *} Function bthuc(x:real; a:integer):real; begin if a = 256 then bthuc :=x*x + 256/(x*x) else bthuc := x*x + a/bthuc(x,a*2); end; {* * * * * * * * * * * * * * * * * *} Begin cau := x/ bthuc(x,2); End; Bài Cho số nguyên dơng N ( N[...]... đơn giản và đẹp mắt của các chơng trình con đệ qui thừa sức để bù vào sự không hiệu quả có thể có Trừ khi những chơng trình con này cần đợc thực hiện nhiều lần 17 Nguyễn Thị Minh Lập trình đệ qui Chơng II Một số vấn đề liên quan đến chơng trình con đệ qui 2.1 Các loại đệ qui 2.1.1 Đệ qui đuôi Đệ qui đuôi là dạng đệ qui mà trong một cấp đệ qui, chỉ có một lời gọi đệ qui duy nhất xuống cấp thấp Một ví... Nguyễn Thị Minh Lập trình đệ qui Factor := Fn; End; Với các ví dụ trên bài toán có thể giải quyết một cách dễ dàng nh nhau bằng cách dùng thuật toán đệ qui hay không đệ qui Nhng bài toán đệ qui sẽ tạo ra một số điều không hiệu quả (sẽ đợc nêu ở mục sau) Vì thế, với những bài toán có thể giải quyết đợc cả đệ qui và không đệ qui với công sức không khác nhau là mấy, cách giải quyết không đệ qui thờng đợc... chơng trớc Hình ảnh đệ qui đuôi Phạm vi bài toán nhỏ dần một cách tuyến tính, một trờng hợp sẽ chỉ đa về một trờng hợp nhỏ hơn 2.1.2 Đệ qui nhánh Đệ qui nhánh là dạng đệ qui mà trong suốt quá trình thực hiện hàm (thủ tục) đệ qui, lời gọi đệ qui đợc thực hiện nhiều hơn một lần VD1 Tính Fibonacci Fibonacci(n)= 1 nếu n=1 hoặc n=2 Fibonacci(n-1)+ Fibonacci(n-2) với trờng hợp còn lại Hàm đệ qui tính Fibonacci(n)... toán đệ qui và không đệ qui dùng thuật toán không đệ qui thờng là thích hợp hơn Mặc dù vậy đệ qui là có ích khi phải giải những bài toán có tính qui nạp Nhiều tình huống nếu không dùng đệ qui thì việc cài đặt trở nên phức tạp Một thí dụ điển hình là bài toán tháp Hà Nội (sẽ đợc giới thiệu ở mục sau) 2.2.2 Khử đệ qui bằng Stack tự tạo Quy tắc: Chỉ đa vào stack những tham số có ý nghĩa trong quá trình đệ. .. End; 2.3.3 Chơng trình con đệ qui cùng tham số kiểu mảng Chúng ta mới xét những ví dụ với tham số có kiểu đơn giản Chơng trình con đệ qui vẫn có thể giải quyết các bài toán với tham số có kiểu là kiểu dữ liệu có cấu trúc Phần này giới thiệu chơng trình con đệ qui với tham số kiểu mảng VD1 Tổng các giá trị phần tử trong một mảng 25 Nguyễn Thị Minh Lập trình đệ qui Bài toán: Viết hàm đệ qui tính tổng giá... chơng trình con khi đã đợc định nghĩa câm thì khi định nghĩa thật không cần ghi lại danh sách tham số (nếu có) 2.2 Khử đệ qui Có một số giải thuật đệ qui thuộc loại tính toán đơn giản có thể đợc thay thế bởi một giải thuật khác không tự gọi nó, sự thay đổi đó gọi là khử đệ qui 2.2.1 Khử đệ qui bằng vòng lặp (Hay còn gọi khử đệ qui bằng phơng pháp lặp) 2.2.1.1 Phơng pháp Quy tắc : Chuyển tham số đệ qui. .. với đệ qui nhánh, hiếm khi có thể khử đợc bằng vòng lặp Tuy nhiên , đây là một ngoại lệ Đặc biệt với đệ qui nhánh nếu đợc thay thế bằng thuật toán không đệ qui thì hiệu quả của thuật toán đợc tăng lên rõ rệt 2.2.1.2 So sánh thuật toán đệ qui và phơng pháp lặp Thông thờng để tính một dãy các giá trị đợc định nghĩa bằng đệ qui nếu dùng phép lặp thì số các phép tính sẽ ít hơn là dùng thuật toán đệ qui. .. nghĩa trong quá trình đệ qui Phơng pháp này thờng áp dụng trong trờng hợp đệ qui nhánh Nh đã trình bày, khi có lời gọi đệ qui, chơng trình tự động đẩy vào stack toàn bộ biến cục bộ và tham số của hàm đệ qui Dù ta đã tiết kiệm đợc tối đa, nhng chúng ta vẫn phải sử dụng lợng biến cục bộ nhất định nào đó Tuy nhiên, những biến cục bộ này đôi lúc lại không cần thiết trong quá trình đệ qui Trong những trờng... trong quá trình đệ qui Ngoài ra, việc tự tạo một stack riêng còn có một lợi điểm nữa là có thể tạo ra đợc một stack có kích thớc lớn từ đó có thể tăng đợc độ sâu của đệ qui; trong khi đó, stack do chơng trình tự tạo có kích thớc hạn chế và nh vậy sẽ hạn chế độ sâu của đệ qui Xét cho cùng, phơng pháp stack tự tạo không phải là một phơng án khử đệ qui (tuy rằng nó làm mất đi các lời gọi đệ qui) mà chỉ... lời gọi đệ qui) mà chỉ là phơng án tối u sử dụng bộ nhớ để làm tăng độ sâu đệ qui mà thôi Nhìn chung, khử đệ qui bằng stack là một kĩ thuật khó Cấu trúc của stack là của một thành phần sẽ biến động tuỳ theo chơng trình đệ qui Thông thờng, khử đệ qui bằng stack tự tạo đòi hỏi ta phải tiến hành phân tích thật tỉ mỉ chơng trình đệ qui VD Tô màu cho hình kín Procedure tomau(x0,y0:byte; mau:byte); Begin Top:=-1; ... Minh Lập trình đệ qui Chơng chơng trình đệ qui 1.1.Mở đầu 1.2.Những đặc điểm chơng trình đệ qui hớng giải 1.2.1 Khái niệm chơng trình đệ qui 1.2.2 Cấu trúc chơng trình đệ qui. .. 12 2.1.1 Đệ qui đuôi 12 2.1.2 Đệ qui nhánh 12 2.1.3 Đệ qui tơng hỗ .13 2.2.Khử đệ qui .13 Nguyễn Thị Minh Lập trình đệ qui 2.2.1 Khử đệ qui vòng lặp ... toán đệ qui Chơng : Một số vấn đề liên quan đến chơng trình đệ qui Bên cạnh giới thiệu loại đệ qui, chơng giới thiệu phơng pháp khử đệ qui, số ứng dụng phơng pháp đệ qui Đồng thời đa số lỗi lập trình