Đáp án đúng: AĐề bài cho thuật toán `Test` và một mảng `A`. Ta cần xét từng trường hợp để xem giá trị `vt` trả về có đúng không.
* Trường hợp 1: `Test(3, 1, 8)`
* `m := trunc((1+8)/2) = 4`
* `x = 3`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (3 < a[4] = 8) và `i < m` (1 < 4) là đúng. Gọi đệ quy `Test(3, 1, 3)`
* `m := trunc((1+3)/2) = 2`
* `x = 3`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (3 < a[2] = 2) là sai. Kiểm tra điều kiện `x > a[m]` (3 > a[2] = 2) và `j > m` (3 > 2) là đúng. Gọi đệ quy `Test(3, 3, 3)`
* `m := trunc((3+3)/2) = 3`
* `x = 3`, `a[3] = 9`. Vì `x != a[3]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (3 < a[3] = 9) và `i < m` (3 < 3) là sai. Kiểm tra điều kiện `x > a[m]` (3 > a[3] = 9) và `j > m` (3 > 3) là sai.
* Vậy `vt := 0`.
* Kết quả `vt = 0` là đúng.
* Trường hợp 2: `Test(4, 1, 8)`
* `m := trunc((1+8)/2) = 4`
* `x = 4`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (4 < a[4] = 8) và `i < m` (1 < 4) là đúng. Gọi đệ quy `Test(4, 1, 3)`
* `m := trunc((1+3)/2) = 2`
* `x = 4`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (4 < a[2] = 2) là sai. Kiểm tra điều kiện `x > a[m]` (4 > a[2] = 2) và `j > m` (3 > 2) là đúng. Gọi đệ quy `Test(4, 3, 3)`
* `m := trunc((3+3)/2) = 3`
* `x = 4`, `a[3] = 9`. Vì `x != a[3]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (4 < a[3] = 9) và `i < m` (3 < 3) là sai. Kiểm tra điều kiện `x > a[m]` (4 > a[3] = 9) và `j > m` (3 > 3) là sai.
* Vậy `vt := 0`.
* Kết quả `vt = 5` là sai.
* Trường hợp 3: `Test(6, 1, 8)`
* `m := trunc((1+8)/2) = 4`
* `x = 6`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (6 < a[4] = 8) và `i < m` (1 < 4) là đúng. Gọi đệ quy `Test(6, 1, 3)`
* `m := trunc((1+3)/2) = 2`
* `x = 6`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (6 < a[2] = 2) là sai. Kiểm tra điều kiện `x > a[m]` (6 > a[2] = 2) và `j > m` (3 > 2) là đúng. Gọi đệ quy `Test(6, 3, 3)`
* `m := trunc((3+3)/2) = 3`
* `x = 6`, `a[3] = 9`. Vì `x != a[3]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (6 < a[3] = 9) và `i < m` (3 < 3) là sai. Kiểm tra điều kiện `x > a[m]` (6 > a[3] = 9) và `j > m` (3 > 3) là sai.
* Vậy `vt := 0`.
* Kết quả `vt = 0` là đúng.
* Trường hợp 4: `Test(7, 1, 8)`
* `m := trunc((1+8)/2) = 4`
* `x = 7`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (7 < a[4] = 8) và `i < m` (1 < 4) là đúng. Gọi đệ quy `Test(7, 1, 3)`
* `m := trunc((1+3)/2) = 2`
* `x = 7`, `a[1] = 5`. Vì `x != a[1]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (7 < a[2] = 2) là sai. Kiểm tra điều kiện `x > a[m]` (7 > a[2] = 2) và `j > m` (3 > 2) là đúng. Gọi đệ quy `Test(7, 3, 3)`
* `m := trunc((3+3)/2) = 3`
* `x = 7`, `a[3] = 9`. Vì `x != a[3]` nên kiểm tra điều kiện tiếp theo.
* `x < a[m]` (7 < a[3] = 9) và `i < m` (3 < 3) là sai. Kiểm tra điều kiện `x > a[m]` (7 > a[3] = 9) và `j > m` (3 > 3) là sai.
* Vậy `vt := 0`.
* Kết quả `vt = 8` là sai.
Vậy đáp án đúng là Test(3,1,8), vt = 0;