Tôi vừa đọc được cái nay nên đưa len cho moi người xem.
Xét hàm tính giai thừa viết bằng giải thuật đệ quy như sau:
FUNCTION Giai_thua(n:Integer): Integer;
BEGIN
IF n=0 then Giai_thua :=1
ELSE Giai_thua := n* Giai_thua(n-1);
END;
Gọi T(n) là thời gian thực hiện việc tính n giai thừa, thì T(n-1) là thời gian thực hiện việc tính n-1 giai thừa. Trong trường hợp n = 0 thì chương trình chỉ thực hiện một lệnh gán Giai_thua:=1, nên tốn O(1), do đó ta có T(0) = C1. Trong trường hợp n>0 chương trình phải gọi đệ quy Giai_thua(n-1), việc gọi đệ quy này tốn T(n-1), sau khi có kết quả của việc gọi đệ quy, chương trình phải nhân kết quả đó với n và gán cho Giai_thua. Thời gian để thực hiện phép nhân và phép gán là một hằng C2. Vậy ta có
T(n) = C1 nếu n=0 hay T(n)= (n-1)+ C2 nêu n>0
Ðây là phương trình đệ quy để tính thời gian thực hiện của chương trình đệ quy Giai_thua.
--
Trần Minh Hùng
Truong Cao dang Phat thanh-Truyen hinh II
Trung tâm đào tạo nghề công nghệ cao
Giám đốc