Cho thuật toán:
Function Test(a,b:Integer): Integer;
Begin
If (a=0) or (b=0) then Test:=a+b
Else
If a > b then Test:=Test(a-b,b)
Else Test:= Test(a,b-a);
End;
Với a = 81, b = 54. Kết quả nào đúng trong số những kết quả dưới đây:
Trả lời:
Đáp án đúng: D
Thuật toán trên thực chất là tìm ước chung lớn nhất (ƯCLN) của hai số a và b.
* **Bước 1:** a = 81, b = 54. Vì a > b, nên Test(81, 54) gọi Test(81-54, 54) = Test(27, 54).
* **Bước 2:** a = 27, b = 54. Vì a < b, nên Test(27, 54) gọi Test(27, 54-27) = Test(27, 27).
* **Bước 3:** a = 27, b = 27. Vì a không lớn hơn b và cũng không nhỏ hơn b, nên điều kiện (a=0) or (b=0) không thỏa mãn. Tuy nhiên, vì a=b nên thuật toán sẽ lặp lại đến khi một trong hai số bằng 0. Ta có thể nhận thấy rằng Test(27,27) = Test(0,27) hoặc Test(27,0)
* **Bước 4:** a = 0, b = 27. Vì a = 0, nên Test(0, 27) trả về a + b = 0 + 27 = 27.
Vậy, kết quả đúng là 27.





