THUẬT TOÁN ĐỆ QUY MINH HỌA BẰNG FREE PASCAL

15 761 1
THUẬT TOÁN ĐỆ QUY MINH HỌA BẰNG FREE PASCAL

Đ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

THUẬT TOÁN ĐỆ QUY MINH HỌA BẰNG FREE PASCAL Trong giới lập trình, có nhiều thuật tốn như: thuật tốn tìm kiếm, xếp, quy hoạch động, đồ thị, Trong có thuật tốn tiếng, Đệ quy Nếu bạn người học lập trình, hẳn bạn tìm hiểu nghe nói thuật toán kinh điển Thuật toán ứng dụng rộng rãi tin học tốn học Có nhiều tốn giải thuật tốn Đệ quy hiệu Thậm chí có tốn suy nghĩ theo cách Đệ quy giải Edited by: Nguyễn Khắc Nho Page 1 Vấn đề Đệ quy 1.1 Các ví dụ: Ví dụ 1: Hãy tính S(n) = 1+2+3+…+n (tính tổng n số nguyên dương đầu tiên) Nếu n = 10, giải cách cộng 10 số nguyên dương đầu tiên, kết 55: S(10) = 1+2+3+…+10 = 55 Nếu tính tiếp n = 11 giải toán với trên, nghĩa cộng 11 số nguyên dương kết 66 Tuy nhiên thực tế để tính S(11) biết S(10) người ta lấy kết S(10) cộng thêm cho 11: S(11) = S(10) + 11 = 66 Bài toán tính S(n) giải tổng quát qua hai bước phân tích ngược sau: (1) Bước phân tích:  Để tích S(n) trước tiên phải tính S(n-1), sau tính S(n) = S(n-1) + n  Để tích S(n-1) trước tiên phải tính S(n-2), sau tính S(n-1) = S(n-2) + n-1  …  Để tích S(2) trước tiên phải tính S(1), sau tính S(2) = S(1) +  Và cuối S(1) có kết Bước phân tích tốn tính S(n) S(n) = S(n-1) + n S(n-1) = S(n-2) + n-1 … … S(2) = S(1) + S(1) = (2) Bước ngược: Có kết S(1) thay vào biểu thức tính S(2) tính S(2), có S(2) tính S(3),…, có S(n-1) tính S(n), tốn giải Bước ngược tốn tính S(n) S(1)= S(2) = S(1) + = S(3) = S(2) +3 = … S(n) = S(n-1) + n Ví dụ 2: Tính P(n) = xn với x số thực n số nguyên ≥ Tương tự tốn trên, tốn tính P(n) giải tổng quát qua hai bước bước phân tích bước ngược sau: (1) Bước phân tích:      Để tính P(n) trước tiên phải tính P(n-1), sau tính P(n) = P(n-1) * x Để tính P(n-1) trước tiên phải tính P(n-2), sau tính P(n-1) = P(n-2) * x … Để tính P(1) trước tiên phải tính P(0), sau tính P(1) = P(0) * x Và cuối P(0) có kết Bước phân tích tốn tính P(n) Edited by: Nguyễn Khắc Nho Page P(n) = P(n-1) * x P(n-1) = P(n-2) + x … … P(1) = P(0) * P(0) = (2) Bước ngược: Có kết P(0) thay vào biếu thức tính P(1) tính P(1), có P(1) tính P(2),…, có P(n-1) tính P(n), tốn giải Bước ngược tốn tính S(n) P(0)= P(1) = P(0) * x = x P(2) = P(1) * x = x*x … P(n) = P(n-1) * x Lưu ý:    Trong trình giải hai toán giống chỗ tiến hành giải qua hai bước bước phân tích bước ngược Ở bước phân tích, tốn lớn phân tích thành tốn đồng dạng (nhưng đơn giản hơn) Bước phân tích dừng lại phân tích đến tốn đồng dạng đơn giản mà xách định kết cách trực tiếp Ở bước ngược giúp xác định kết toán đồng dạng (từ đơn giản đến phức tạp hơn), cuối xác định kết toán 1.2 Vấn đề Đệ quy gì? Vấn đề Đệ quy vấn đề định nghĩa nó, ví dụ:   Tính tổng S(n) (tính tổng n số nguyên dương đầu tiên) định nghĩa thơng qua S(n-1) (tính tổng n-1 số nguyên dương đầu tiên) Tính P(n) ( tính xn) định nghĩa thơng qua P(n-1) (tính (xn-1) Vấn đề Đệ quy thường giải qua hai bước bước phân tích bước ngược Bài tốn (hay vấn đề) giải theo phương pháp Đệ quy cần hai điều kiện sau để hữu (tồn tại) tính Đệ quy không bị gọi Đệ quy bất tận (bị loop): (1) Để hữu (tồn tại) tính Đệ quy – nghĩa để giải toán phải giải toán đồng dạng, để giải toán đồng dạng phải giải toán đồng dạng khác – phải tồn bước Đệ quy Bài tốn có bước Đệ quy S(n) = S(n-1) + n, tốn có bước Đệ quy xn=xn-1*x (2) Để không bị gọi Đệ quy bất tận (bị loop) phải có điều kiện dừng Bài tốn có điều kiện dừng S(1) = 1, tốn có điều kiện dừng x0 =1 => Bài toán Đệ quy toán phân rã thành tốn nhỏ hơn, đơn giản có dạng với toán ban đầu Những toán nhỏ lại phân rã thành toán nhỏ Cứ vậy, việc phân rã dừng lại toán đơn giản đến mức suy kết mà không cần phải phân rã Ta phải giải tất toán kết hợp kết lại để có lời giải cho toán lớn ban đầu Cách phân rã toán gọi "chia để trị" (devide and conquer), dạng Đệ quy Chương trình Đệ quy Edited by: Nguyễn Khắc Nho Page Một chương trình (hàm thủ tục) gọi Đệ quy q trình thực có phần phải gọi đến Ví dụ 1: Hàm tính lũy thừa nguyên số thực x (tính xn) Function LT(x: real, n: integer): real; Begin If n=0 then LT:=1 else LT:=LT(x,n-1)*x; End; Khi có lệnh gọi hàm, chẳng hạn: a:=LT(3,4); Thì máy nhớ là: LT(3,4):=3*LT(3,3) tính LT(3,3); Kế tiếp máy lại phải ghi nhớ: LT(3,3):=3*LT(3,2) tính LT(3,2); Kế tiếp máy lại phải ghi nhớ: LT(3,2):=3*LT(3,1) tính LT(3,1); Kế tiếp máy lại phải ghi nhớ: LT(3,1):=3*LT(3,0) tính LT(3,0); Theo định nghĩa hàm LT: LT(3,0):=1; Máy quay ngược lại: LT(3,1):=3*1=3; Rồi tiếp tục quy ngược lại: LT(3,2):=3*3=9; LT(3,3):=9*3=27; LT(3,4):=27*3:=81; Ví dụ 2: Hàm tính giai thừa n (tính n!) Function GT(n: word): longint; Begin If n=1 then GT:=1 else GT:=GT(n-1)*n; End; Cấu trúc chương trình Đệ quy Một chương trình Đệ quy vè gồm phần: (1) Phần cố định (điều kiện dừng): Trong chứa tác động hàm thủ tục với với số giá trị thể ban đầu tham số Trong ví dụ 1: If n=0 then LT:=1; Trong ví dụ 2: If n=1 then GT:=1; (2) Phần hạ bậc Trong tác động cần thực cho giá trị thời tham số định nghĩa tác động định nghĩa trước với kích thước nhỏ tham số: Trong ví dụ 1: If n > then LT:=LT(x,n-1)*x; Trong ví dụ 2: If n > then GT:=GT(n-1)*n; Các loại Đệ quy 4.1 Đệ quy đuôi Đệ quy đuôi dạng Đệ quy mà cấp Đệ quy, có lời gọi Đệ quy xuống cấp thấp Ví dụ 1: Hàm tính giai thừa n (tính n!) Funtion GT(n: word): longint; Edited by: Nguyễn Khắc Nho Page Begin If n:=1 then GT:=1 else GT:=GT(n-1)*n; End; Ví dụ 2: Tìm vị trí xuất số x dãy a gồm n số tăng dần Ta giải tốn tìm kiếm nhị phân Tư tưởng thuật tốn: Xét số dãy số gội phần tử giữa, x lớn số này, nghĩa x phải nằm dãy số phía bên phải phần tử giữa, x nhỏ thi x phải nằm dãy số bên trái phần tử giữa, x tìm x Type DaySo=Array[1 100] of integer; Function Tim(a:Dayso;left, right:integer): integer; Begin If (left>right) then Tim:= -1 Else Begin Mid:=(right+left) div 2; If (a[mid]=x) then Tim:=mid Else If x>a[mid] then Tim(mid+1,right) Else Tim:=Tim(left, mid -1); End; End; Nhận xét: Chúng ta thấy lời gọi Đệ quy xuất hai lần hàm (Tim(mid+1,right) Tim(left, mid -1), lần thi hành hàm hai thi hành 4.2 Đệ quy nhánh Đệ quy nhánh dạng Đệ quy mà suốt trình thực hàm Đệ quy, lời gọi hàm Đệ quy thực nhiều lần Ví dụ 1: Bài tốn tháp Hà Nội Cho n dĩa tròn có kích thước khác đặt xuyên qua cọc cho dĩa nhỏ dĩa to Hãy chuyển toàn số dĩa sang cọc khác với điều kiện: Khi chuyển, chuyển, chuyển dĩa sang cọc trung gian khác cọc, dĩa nhỏ nằm dĩa lớn Để đơn giản, gọi cọc nguồn cọc A, cọc đích B cọc trung gian cọc C Các dĩa đánh số theo thứ tự từ đến n Dĩa có số lớn đường kính lớn Thuật giải Đệ quy Để chuyển n dĩa từ cọc A sang cọc B cần: chuyển n-1 dĩa từ A sang C Chỉ lại dĩa n cọc A chuyển dĩa n từ A sang B chuyển n-1 dĩa từ C sang B cho chúng nằm dĩa n Edited by: Nguyễn Khắc Nho Page Phương pháp gọi thuật giải Đệ quy: Để tiến hành bước 3, áp dụng lại thuật giải cho n-1 Tồn q trình số hữu hạn bước, đến lúc thuật giải áp dụng cho n = Bước đơn giản chuyển dĩa từ cọc A sang cọc C Giải thích thuật giải với n=3: chuyển đĩa sang cọc C chuyển đĩa sang cọc B chuyển đĩa từ C sang B cho nằm lên Vậy ta có đĩa nằm cọc B, cọc C thời trống chuyển đĩa sang cọc C lặp lại bước để chuyển & cho nằm lên Mỗi lần dựng xong tháp từ đĩa i đến 1, chuyển đĩa i+1 từ cọc A cọc xuất phát, lại di chuyển tháp dựng lên đĩa i+1 Program ThapHaNoi; Var n:integer; Procedure ChuyenDia(n:integer; nguon,dich:char); Begin writeln('chuyen dia: ',n,' tu coc ',nguon,' sang coc ',dich); End; Procedure ChuyenChongDia(n:integer; nguon,dich:char); Var trunggian:char; Begin if(nguon'A') and (Dich'A') then trunggian:='A'; if(nguon'B') and (Dich'B') then trunggian:='B'; if(nguon'C') and (Dich'C') then trunggian:='C'; if n=1 then ChuyenDia(n,nguon,dich) else Begin ChuyenChongDia(n-1,nguon,trunggian); ChuyenDia(n,nguon,dich); ChuyenChongDia(n-1,trunggian,dich); End; End; Begin Write('Nhap vao so dia: '); readln(n); ChuyenChongDia(n,'A','B'); readln End Nhận xét: Trong lần thi hành, có hai lời gọi Đệ quy – Đệ quy rẽ nhánh Ví dụ 2: Liệt kê tất hoán vị dãy n phần tử khác (tổng số hoán vị dãy n phần tử n!) Chẳng hạn với dãy có phần tử ABC tất hốn vị ABC, ACB, BAC, BCA, CAB, CBA Tư tưởng thuật toán sau: Xét phần tử từ đến n (n chiều dài dãy số - DaySo): + Bỏ phần tử khỏi dãy số + Ghi nhận lấy phần tử + Hoán vị (dãy số) Edited by: Nguyễn Khắc Nho Page + Đưa phần tử vào lại dãy số Nếu dãy số rỗng thứ thự phần tử lấy hốn vị Ví dụ: Dãy số ABC Bỏ A (còn BC) Bỏ B (còn C) Bỏ C -> hốn vị ABC Bỏ C (còn B) Bỏ B -> hoán vị ACB Bỏ B (còn AC) Bỏ A (còn C) Bỏ C -> hốn vị BAC Bỏ C (còn A) Bỏ A -> hốn vị BCA Bỏ C (còn AB) Bỏ A (còn B) Bỏ B -> hốn vị CAB Bỏ B (còn A) Bỏ A -> hốn vị CBA Program HoanViDaySo; Var Day: Array[1 10] of char; // mảng lưu phần tử SoKyTu,i: Integer;// Số phần tử DuocChon: Array[1 10] of boolean;//ghi nhận phần tử lấy khỏi dãy Procedure HoanVi(kytu:string); Var i:integer; Chon: Boolean;// =false, khơng ký tự để lấy nữa, dãy rỗng Begin chon:=false; for i:=1 to SoKyTu Begin if (DuocChon[i]=false) then Begin DuocChon[i]:=True; HoanVi(KyTu+Day[i]); // Lời gọi Đệ quy gọi nhiều lần vòng lặp DuocChon[i]:=false; Chon:=true; End; End; if chon=false then writeln(KyTu);// dãy rỗng phần tử chọn theo thứ tự HV End; Begin Write('Nhap vao so phan tu cua day: '); readln(SoKyTu); For i:=1 to SoKyTu Begin Write('Nhap vao phan tu thu ',i,': '); readln(Day[i]); End; For i:=1 to SoKyTu Do DuocChon[i]:=false; Edited by: Nguyễn Khắc Nho Page hoanvi(''); readln End 4.3 Đệ quy tương hỗ tương Đệ quy hỗ tương dạng Đệ quy mà có gọi quay vòng A gọi B, B gọi C C lại gọi A Đây trường hợp phức tạp có nhiều ví dụ hấp dẫn Ví dụ: Viết chương trình tính X(n) Y(n) X(n) Y(n) xác định công thức sau: ( ) = ( − 1) + ( − 1) A(0) B(0) =1 ( ) = ( − 1) ∗ ( − 1) Cây nhị phân biểu diễn tính A(3) B(3) sau: Chương trình: Program TinhXnVaYn; Var n:byte; Function TinhYn(n:byte): longint; forward;// Từ khóa dùng để khai báo trước tên hàm Function TinhXn(n:byte): longint; forward;// Nếu khơng có khơng thể dụng Đệ quy Function TinhXn(n:byte): longint; // tương hỗ Edited by: Nguyễn Khắc Nho Page Begin if n=0 then TinhXn:=1 else TinhXn:=TinhXn(n-1)+TinhYn(n-1); End; Function TinhYn(n:byte): longint; Begin if n=0 then TinhYn:=1 else TinhYn:=TinhXn(n-1)*TinhYn(n-1); End; Begin Write('Nhap vao n: '); readln(n); Writeln('Gia tri cuar X(',n,') la: ',TinhXn(n)); Write('Gia tri cuar Y(',n,') la: ',TinhYn(n)); readln End Ưu nhược điểm Đệ quy 5.1 Ưu điểm Đệ quy mạnh chỗ định nghĩa tập hợp lớn tác động số mệnh đề Một chương trình viết theo giải thuật Đệ quy tự nhiên là: + Sáng sủa + Dễ hiểu + Nêu bật chất vấn đề Có nhiều tốn chưa có cách giải khơng Đệ quy 5.2 Nhược điểm Trong giải thuật Đệ quy toán gọi lại nhiều lần, dù trước kết tốn tính Nên thực giải thuật Đệ quy sẽ: + Tốn nhiều dung lượng + Cực kỳ chậm Khử Đệ quy Có số giải thuật Đệ quy thuộc loại tính tốn đơn giản thay giải thuật khác khơng tự gọi nó, thay gọi khử Đệ quy Tuy nhiên, khơng có nghĩa phải khử Đệ quy giá không e ngại ác cảm với việc dùng Đệ quy 6.1 Khử Đệ quy vòng lặp Quy tắc: Chuyển tham số Đệ quy thành biến đếm vòng lặp Phương pháp vòng lặp thường áp dụng với kiểu Đệ quy Nếu quan sát thấy hình ảnh “cái đi” Đệ quy đi, ta nhận thấy là dãy thao tác lặp lặp lại với quy mô “nhỏ” dần lúc đạt trạng thái dừng Đặc tính tương tự ý niệm vòng lặp: Lặp lại dãy thao tác lúc gặp điều kiện dừng Nếu ta chuyển đổi từ quy mơ tốn sang điều kiện thi hành (hoặc điều kiện dừng) vòng lặp ta khử lời gọi Đệ quy vòng lặp Ví dụ 1: Tính giai n! Điều kiện dừng thật tốn Đệ quy n=2, điều kiện dừng vòng lặp Edited by: Nguyễn Khắc Nho Page Cách 1: Đệ quy var n:integer; Function GT(n:integer): integer; Begin if n right) Ta dùng biểu thức làm điều kiện dừng vòng lặp Program Timkiemnhiphan; Type Dayso=Array[1 1000] of integer; Var a:DaySo; n,x,i:integer; Function Tim(a:dayso): integer; Var TimThay: Boolean; left, right, mid: integer; Begin Tim:=-1; TimThay:=False; //Ban đầu xem không tim thấy left:=1; right:=n; // tìm tồn mảng While(lefta[mid] then left:=mid+1 //Thu hẹp dãy số nửa bên phải else right:=mid-1; //Thu hẹp dãy số nửa bên trái End; write('Vi tri gia tri can tim day la: ',tim); Edited by: Nguyễn Khắc Nho Page 10 End; Begin Write('Nhap vao so can tim: '); readln(x); Write('nhap vao so phan tu cua day: '); readln(n); For i:=1 to n Begin Write('nhap vao phan tu thu ',i,' cua day: '); readln(a[i]); // Chú ý nhập dãy số dãy tăng End; Tim(a); readln End So sách Đệ quy vòng lặp: Đệ Quy Vòng Lặp CẤU TRÚC LẶP Xây dựng cấu trúc tùy ý, thường Sử dụng vòng lặp NNLT: Có chương trình Tự gọi lại hai loại lặp với số lần biết trước để sinh vòng lặp lặp với số lần chưa biết trước ĐIỂM DỪNG Khi gặp trường hợp sở q Khi điều kiện trì vòng lặp trình Đệ quy khơng thỏa mãn Q LẶP Đi từ trường hợp ban đầu đến Là vòng lặp đơn Sau TRÌNH trường hợp sở Tại bước bước giá trị “biến đếm” thay đổ để lặp độ phức tạp toán giảm đến điểm dừng dần LẶP VÔ HẠN SO SÁCH ƯU NHƯỢC ĐIỂM Các bước Đệ quy làm Nếu điều kiện trì vòng lặp đơn giản tốn Chương trình khơng sai lặp vơ hạn khơng thể hội tụ trường hợp sở Ưu: Đệ quy giải tốt số tốn dạng vòng lặp cách dễ dàng Chương trình thiết kế đơn giản Dễ đưa phương án tối ưu, giải số vấn đề vòng lặp thơng thường khơng giải Ưu: Ít tốn nhớ, dễ dàng việc quản lý vòng lặp Quá trình thiết kế vòng lặp đơn giản nhiều so với Đệ quy Nhược: Do có nhiều tốn Nhược: Nhiều tốn vòng lặp gọi lại gọi trước thông thường không giải rồi, nên Đệ quy tốn nhớ, phải nhờ đến Đệ quy quản lý không tốt bị tràn nhớ 6.2 Khử Đệ quy stack tự tạo Quy tắc: Chỉ đưa vào stack tham số có ý nghĩa q trình Đệ quy Phương pháp thường dùng đệ quy nhánh Khi có lời gọi Đệ quy, chương trình tự động Push vào stack toàn biến cục tham số hàm đệ quy Dù ta có tiết kiệm nhớ tối đa, chương trình phải sử dụng lượng biến cục định Tuy nhiên, biến cục đôi lúc lại không cần thiết trình Đệ quy Trong trường hợp đó, Edited by: Nguyễn Khắc Nho Page 11 người ta tạo stack riêng push vào stack biến có ý nghĩa q trình Đệ quy Ngồi ra, việc tự tạo stack riêng có lợi điểm tạo stack có kích thước lớn từ tăng độ sâu đệ quy; stack chương trình tự tạo thường có kích thước hạn chế hạn chế độ sâu đệ quy Xét cho phương pháp stack tự tạo phương pháp khử đệ quy (tuy làm lời gọi đệ quy) mà phương án tối ưu sử dụng nhớ để làm tăng độ sâu đệ quy mà Nhìn chung, khử đệ quy stack kỹ thuật khó Cấu trúc stack thành phần biến động tùy theo chương trình đệ quy Thơng thường, khử đệ quy 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 đệ quy Các bước thực hiện:    Khởi tạo stack với số phần tử phù hợp Đưa tham số đầu vào stack Khi Stack không trống: + Lấy tham số khỏi stack; + Xử lý tác vụ ứng với tham số Nếu gặp tác vụ đệ quy lại đưa tham số tác vụ đệ quy tương ứng vào stack Ví dụ: Cho hình kín điểm (x0, y0) nằm bên hình đó, tơ màu phần bên hình Ta giải tốn phương pháp tơ loang Nghĩa từ điểm (x0, y0) ban đầu, ta tô loang điểm kế điểm (x0+1, y0), (x0-1, y0), (x0, y0+1), (x0, y0-1) Và từ điểm ta lại tiếp tục tô điểm điểm chưa tơ màu có màu trùng với màu biên Quá trình tiếp tục lúc khơng điểm để tơ Người ta gọi thuật toán thuật toán FloodFill Cách 1: Sử dụng thuật toán đệ quy Edited by: Nguyễn Khắc Nho Page 12 Program FloodFill; Var Matran: Array[0 9,0 9] of Byte; maubien,i,j: byte; Procedure Inmatran; Begin For i:=0 to Begin For j:=0 to write(matran[i,j]:3); writeln; End; End; Procedure Fill(x,y:integer; Mau:integer); Begin If (Matran[x,y]MauBien) and (Matran[x,y]mau) then Begin Matran[x,y]:=mau; if x0 then Fill(x-1,y,mau); if y0 then Fill(x,y-1,mau); End; End; Begin maubien:=1; // màu đường biên Writeln('Ma tran truoc FloodFill'); inmatran; fill(4,3,2); Writeln('Ma tran sau FloodFill'); inmatran; readln End Cách 2: Sử dụng stack tự tạo: Giả sử có chương trình sau: {chúng ta tham khảo cách tạo sử dụng ngăn xếp và hàng đợi chuyên đề “CẤU TRÚC DỮ LIÊU NÂNG CAO” + Thủ tục Push (x,y:integer) cho phép push vào ngăn xếp tọa độ điểm + Thủ tục Pop (var x,y:integer) cho phép lấy tọa độ điểm đầu ngăn xếp + Hàm IsStackEmpty cho biết stack có rỗng hay khơng Thủ tục tô màu sau: Procedure Fill(x0,y0:integer; Mau:Byte); Var x,y:integer; Begin Top:=-1; Push(x0,y0); While IsStackEmpty=False Do Begin Pop(x,y); Edited by: Nguyễn Khắc Nho Page 13 If (Matran[x,y]MauBien) and (Matran[x,y]mau) then Begin Matran[x,y]:=mau; if x0 then Fill(x-1,y,mau); if y0 then Fill(x,y-1,mau); End; End; End; Một số toán Bài toán 1: Bài toán tính phần tử thứ n dãy Fibonacci: Dãy Fibonacci dãy vô hạn số tự nhiên bắt đầu hai phần tử 1, phần tử sau thiết lập theo quy tắc phần tử ln tổng hai phần tử trước Cơng thức truy hồi dãy Fibonacci là: Sơ đồ gọi đệ quy với tốn tính F(6): Phần cố định: n=0 n= F(n)=n Phần hạ bậc: F(n)=F(n-1)+F(n-2) Code: Program Fibonacci; Var n:byte; Function Fi(n:byte):longint; Begin if n0 Phần cố định: n=1 S(n) = Phần hạ bậc: S(n)=S(n-1)+1/n Code: Var n:integer; Function TinhS(n:integer): real; Begin if n=1 then TinhS:=1 else TinhS:=TinhS(n-1)+1/n End; Begin Write('Nhap vao so n: '); readln(n); Write('Gia tri cua day so la: ',TinhS(n):4:1); readln End Bài toán 3: Tính S(n)=1+1.2+1.2.3+…+1.2.3…n với n>0 Phần cố định: n≤ S(n)=n; Phần hạ bậc: S(n)=S(n-1)+ n! Code: Var n:byte; Function Gt(n:byte): longint; Begin if n

Ngày đăng: 05/02/2018, 20:37

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan