c++的采用递归方式实现二分查找。帮我看看哪里出错了,谢谢!!

原题:题目:采用递归方式实现二分查找要求完成本题的填空并上机调试通过,理解递归调用的执行过程//实验5_3:sy5_3.cpp#include<iostream>usin... 原题:
题目:采用递归方式实现二分查找
要求完成本题的填空并上机调试通过,理解递归调用的执行过程
//实验5_3:sy5_3.cpp
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key, 0, NUM-1); /*调用二分查找函数进行查找*/
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search(int value[], int key, int low, int high)
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low) /2 ; /*求中间位置*/
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( value, key, high, mid+1 );
我的答案是:
int search(int value[], int key, int low, int high)
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low) /2 ; /*求中间位置*/
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( value, key, high, mid+1 )
万分感谢!!!!!
!!!!!修改一下那个题目:
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key, 0, NUM-1); /*调用二分查找函数进行查找*/
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search( (1) )
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=( (2) ) /*求中间位置*/
if (value[mid]==key) ( (3) )/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( (4) );
}

ps:输入的数由【大】到【小】
一共要填四个空,其他的不能改动。
展开
 我来答
大空翼HHD
2010-12-02 · 超过11用户采纳过TA的回答
知道答主
回答量:22
采纳率:0%
帮助的人:18.9万
展开全部
最后两行的代码逻辑有误:
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( value, key, high, mid+1 )
应该改成:
if(key<value[mid]) return search(value, key, mid+1, high);
else return ( value, key, low, mid-1)
junwang_w
2010-12-02 · 超过11用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:23.7万
展开全部
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key,0, NUM-1); /*调用二分查找函数进行查找*/
//cout<<result;
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search(int value[], int key, int low, int high)
{
int mid=0;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low)/2 ; /*求中间位置*/
//cout<<mid<<endl;
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value,key,mid+1,high); /*在下半区查找*/
else return search(value, key, low,mid-1);
}
多谢你的问题,让我复习了一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xucong198949
2010-12-02 · 超过30用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:74.3万
展开全部
(1)int value[],int key,int low,int high
(2)(low+high)/2
(3)return mid
(4)那儿貌似有点问题,既然数组是从大到小的顺序,应该这样才对
if(key<value[mid])return search(value, key, mid+1, high);
else return search(value,key,low,mid-1);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式