JavaScript is required

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:

A.

81

B.

27

C.

1

D.

9

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.

Câu hỏi liên quan