Em hãy viết hàm đệ quy để tìm kiếm nhị phân giá trị x trong dãy A không giảm có n phần tử A0

Vận dụng trang 34 Chuyên đề Tin học 11Em hãy viết hàm đệ quy để tìm kiếm nhị phân giá trị x trong dãy A không giảm có n phần tử A0,A1, ..., An - 1 các phần tử có thể trùng nhau. Nếu tìm thấy thì hàm này trả về chỉ số i nhỏ nhất mà Ai = x. Nếu không tìm thấy thì hàm này trả về -1.

Trả lời

include
using namespace std;
int tim(int *a,int left,int right,int x)
{
int m;
if(left>right) return 0;
m=(left+right)/2;
if(a[m]==x) return m;
if(x<a[m]) return tim(a,left,m-1,x);
return tim(a,m+1,right,x);
}
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int x;
cout<<"tim so: ";cin>>x;
if(int z=tim(a,0,9,x)) cout<<"tim thay tai vi tri: "<<z<<"\n";
else cout<<"khong tim thay\n";
}

Xem thêm lời giải bài tập Chuyên đề học tập Tin học lớp 11 Cánh diều hay, chi tiết khác:

Bài 4: Thực hành tổng hợp thiết kế thuật toán đệ quy

Bài 1: Ý tưởng chia để trị

Bài 2: Kĩ thuật đệ quy trong chia để trị

Bài 3: Thực hành ứng dụng thuật toán tìm kiếm nhị phân bằng đệ quy

Bài 4: Kĩ thuật chia để trị trong thuật toán sắp xếp trộn

Bài 5: Thực hành tổng hợp ứng dụng chia để trị

Câu hỏi cùng chủ đề

Xem tất cả