这个二进制搜索实现中的无限循环?

Infinite loop in this binary search implementation?

谁能帮我找出这个二分搜索算法实现中的错误。我猜它正在无限循环中运行。函数定义有问题但不确定是什么。

#include <stdio.h>
#define max 5

int binarysearch(int a[],int element,int first,int last);//prototype

int main(void) 
{
    int arr[max]={1,2,3,7,8};
    int b;
    int start=0;
    scanf("%d",&b);
    int search=binarysearch(arr,b,start,max-1);
    if(search==-1)
    {
        puts("element is not there in array");
    }
    else
    {
        printf("element found at position %d",search);
    }
}

int binarysearch(int a[],int element,int first,int last)//definition
{
    int mid=(first+last)/2;
    int initial;int final;
    while(first<=last)
    {
        if(a[mid]==element)
        {
            return mid;
        }
        else if(a[mid]<element)
        {
            initial=mid+1;
            final=last;
            binarysearch(a,element,initial,final);
        }
        else if(a[mid]>element)
        {
            initial=first;
            final=mid-1;
            binarysearch(a,element,initial,final);
        }
    }
    return -1;
}

函数内部有一个不必要的循环:

while(first<=last)

这是一个无限循环,因为 firstlast 永远不会在循环内重新分配。您已经通过在循环体内调用 binarysearch 来使用递归。要么将 while 更改为 if,要么删除递归调用并分配给 firstlast 而不是 initialfinal(并重新计算mid 相应地)。

如果您决定坚持使用递归方法,还要将调用更改为 return binarysearch(…);,否则 return 值将丢失。

进行以下更改

int binarysearch(int a[],int element,int first,int last)//definition
{
int mid=(first+last)/2;
int initial;int final;

if(first > last)
{
  printf("Not found\n");
  return -1;
}
    if(a[mid]==element)
    {
        return mid;
    }
    else if(a[mid]<element)
    {
        initial=mid+1;
        final=last;
        binarysearch(a,element,initial,final);
    }
    else if(a[mid]>element)
    {
        initial=first;
        final=mid-1;
        binarysearch(a,element,initial,final);
    }
}