永发信息网

C语言递归折半查找求数组中的数

答案:1  悬赏:80  手机版
解决时间 2021-12-28 23:23
给定数组int arr[10] = {1, 2, 5, 10, 17, 26, 37, 50, 65, 82},读入用户输入的一个数,在数组中查找,然后输出对应的数的下标(从0开始),若没找到则返回-1。
我的程序查找出来没问题,就是查不出时候的条件不太对。没有返回值。是什么问题啊。
#include<stdio.h>
int fun(int a[],int m,int n,int p)
{
int mid;
mid=(m+n)/2;
if(a[mid]==p)
return mid;
else if(a[mid]<p)
{

return fun(a,mid+1,n,p);
}
else if(a[mid]>p)
{
m=m-m/2;
return fun(a,m,mid-1,p);
}
else if(((mid==m)&&a[m]!=p)||((mid+1)==n)&&a[n]!=p)
return -1;
}
void main()
{
int p;
int array[10]={1,2,5,10,17,26,37,50,65,82};
scanf("%d",&p);
printf("%d",fun(array,0,9,p));
}
最佳答案
判断是否没找到条件不对,改一下:
#include<stdio.h>
int fun(int a[], int m, int n, int p)
{
int mid;
if (m > n)return -1;
mid = (m + n) / 2;
if (a[mid] == p)
return mid;
else if (a[mid]<p)
{
return fun(a, mid + 1, n, p);
}
else if (a[mid]>p)
{
//m = m - m / 2;
return fun(a, m, mid - 1, p);
}
//else if (((mid == m) && a[m] != p) || ((mid + 1) == n) && a[n] != p)
// return -1;
}
void main()
{
int p;
int array[10] = { 1, 2, 5, 10, 17, 26, 37, 50, 65, 82 };
scanf("%d", &p);
printf("%d", fun(array, 0, 9, p));
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
辣妈会怎么去啊,我要去那办事
判断题正方体的表面积与棱长成正比例.
陶渊明历来被称为什么
液晶电视用底座好还是挂架好?我卧室只有7平
男生对女生说滚是啥概念?
设x∈R,则“x2-3x>0”是“x>4”的A.充分而
松滋市米积台烟草专卖所地址有知道的么?有点
英语小说通常一遍看不懂,要看两遍猜能懂,要
单选题塞万提斯说:“礼貌周全不花钱,却比什
松滋市刘家场烟草专卖所地址在什么地方?想过
玩具厂计划生产儿童玩具3500件,实际比计划多
下图为iPod产业链示意图,读图回答小题。1.根
怎么把别的歌曲格式 变为MP3 格式
如何用手机照一寸照片
南宁市有哪些二本院校
推荐资讯
我京东买了个手机。拿货需要身份证吗?今天不
巴宝莉是奢侈品吗
江苏版轻松作业本七年级下数学
单选题《新唐书·百官志》载:“两京置市署:
单选题某户家庭今年1-5月的用电量分别是:72
炳烛①夜读阅读答案
农村屋里太冷怎么办小妙招
鹦鹉叫什么名字好听
未婚女梦见怀孕
单选题“神舟五号”成功发射,这是航天战线的
她迈着的步子,把头垂得低低的,地向汽车站走
为充分发挥文化产业在调整结构扩大内需,增加
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?