Consider the binarySearch() function below:

4 phương ánCó giải thích
Đề bài
int binarySearch(int [] a, int x, int low, int high)
   { int t, k;
     if(low > high) return( -1);
     k = (low + high) / 2;
     if(a[k] == x)   return(k);
     if(x<a[k])  return(binarySearch(a,x,low,k-1);
         else  return(binarySearch(a,x,k+1,high);

   }

Suppose the array a is given by the statement:

Đề bài
int [] a = {2,4,6,8,10,12,14, 16};

For the call binarySearch(a,7,2, 5), how many calls to this will be made, including the original call?

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "3". Lời gọi đầu có low bằng 2, high bằng 5 nên k bằng 3 và phần tử ở chỉ số 3 là 8; vì 7 nhỏ hơn 8 nên gọi tiếp với đoạn từ 2 tới 2. Lời gọi thứ hai có k bằng 2 và phần tử ở chỉ số 2 là 6; vì 7 lớn hơn 6 nên gọi tiếp với low bằng 3, high bằng 2. Lời gọi thứ ba thấy low lớn hơn high nên trả về -1 ngay, không gọi thêm. Vậy có ba lần vào hàm, kể cả lời gọi ban đầu. Số "2" bỏ quên chính lời gọi phát hiện đoạn rỗng, nhưng lần vào hàm ấy có thật và nó mới là chỗ kết luận không tìm thấy 7. Số "4" đòi thêm một tầng nữa sau khi đoạn đã rỗng, mà hàm trả về -1 chứ không gọi tiếp. Số "5" ứng với việc dò trên cả 8 phần tử của mảng, trong khi lời gọi ban đầu đã giới hạn vùng tìm từ chỉ số 2 tới 5, chỉ gồm bốn phần tử.

Cùng phần 3

Xuất hiện trong 1 bộ đề