Chủ Đề 3:
Thuật Toán Đệ Quy Giải Các Bài Toán Đơn Giản
Có lẽ các bậc cao nhân trong 4rum đều biết về thuật toán đệ quy và sử dụng thuần thục. Sau đây mình xin mạn phép post lên các bước làm một bài toán đệ quy cơ bản cho newbie.
Trong các bài toán tin, nhất là những bài toán phức tạp. Thuật toán đệ quy là không thể thiếu nhằm tối ưu hóa bài toán lớn bằng cách gọi chia nhỏ ra mà làm.
một thủ thuật hay hàm được gọi là đệ quy khi trong chính thủ tục hay hàm đó gọi lại chính nó.
các bước lập một CTC đệ quy là:
- Phân tích dữ kiện đề bài
- Chia bài toán lớn thành những bài toán nhỏ đề có thể viết trong một modum
- Lập công thức đệ quy
- viết mã và tạo lập chương trình
Ví Dụ:Giải N!.
theo một đoạn mã thông thường thì:
- Code:
-
function GT(n:integer):integer;
var t,i:integer;
begin
t:=1;
if n=0 then GT:=1 else
for i:=2 to n do t:=t*i;
GT:=t;
end;
Một Đoạn Mã Đệ Quy
Ý tưởng giai thừa là công thức n!=n*(n-1)*(n-2)*...*1
vậy theo công thức trên ta viết ra đoạn mã
- Code:
-
function GT(n:integer):integer;
begin
if (n=0) or (n=1) then GT:=1 else
GT:=GT(n-1)*n
end;
Vậy ta thấy đoạn mã với thuật toán đệ quy tối ưu và hiện đại hơn nhỉ. ^^