强烈支持楼主ing……
用迭代实现了一下:#include <stdio.h>
#include <stdlib.h>
int bin_serach(int str[], int n, int key)
{
int low, mid, high;
low = 0;
high = n - 1;
while(low <= high)
{
mid = (low + high)/2;
if (str[mid] == key)
{
return mid;
}
else if (str[mid] < key)
{
low = mid + 1;
}
else {
high = mid - 1;
}
}
return -1;
}
int getAddr(int str[], int key, int low, int high)
{
if (low > high)
return -1;
int mid = (low + high) / 2;
if (key == str[mid])
return mid;
if (str[mid] < key)
{
low = mid + 1;
}
else if (str[mid] > key)
{
high = mid - 1;
}
return getAddr(str, key, low, high);
}
int main()
{
int str[11] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89};
int n, addr;
printf("请输入要查询的数字:");
scanf("%d", &n);
//addr = bin_serach(str, 11, n);
addr = getAddr(str, n, 0, 11);
if (-1 != addr)
{
printf("查找成功,查询数字%d所在的位置是:%d\n", n, addr);
}
else
{
printf("查找失败");
}
return 0;
}
|