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
Để tìm giá trị của Test(81, 54), ta thực hiện theo thuật toán đệ quy như sau:
1. a = 81, b = 54. Vì a > b, nên Test(81, 54) = Test(81 - 54, 54) = Test(27, 54).
2. a = 27, b = 54. Vì a < b, nên Test(27, 54) = Test(27, 54 - 27) = Test(27, 27).
3. a = 27, b = 27. Vì a không lớn hơn b và a không nhỏ hơn b, nghĩa là a = b. Thuật toán không chỉ rõ trường hợp a = b. Tuy nhiên, dựa vào cách hoạt động của thuật toán, nó sẽ tiếp tục gọi đệ quy cho đến khi một trong hai số bằng 0. Thực chất, thuật toán này đang tìm ước chung lớn nhất (ƯCLN) của a và b. Khi a=b, nó tương đương với việc trừ a và b cho đến khi một trong hai số bằng 0. Lúc này, a = b = ƯCLN(81, 54).
Ta có thể tiếp tục mô phỏng bằng cách xem như a < b hoặc a > b, vì a = b, ta có:
Test(27, 27) = Test(27, 27 - 27) = Test(27, 0).
4. a = 27, b = 0. Vì b = 0, nên Test(27, 0) = a + b = 27 + 0 = 27.
Vậy, Test(81, 54) = 27.
Bộ 525 câu hỏi trắc nghiệm ôn thi môn Toán rời rạc có đáp án dưới đây sẽ là tài liệu ôn tập hữi ích dành cho các bạn sinh viên. Mời các bạn cùng tham khảo!
30 câu hỏi 60 phút