I know that there is a function `bsearch` present in `stdlib.h` but still I want to implement this. 

This is my code for binary search. Any and all reviews are welcome.

    #include<stdio.h>
    #include<stdlib.h>
    
    int compare (const void * a, const void * b)
    {
        return (*(int*)a - *(int*)b);
    }
    
    int bin_search(int arr[], int min_index, int max_index, int element)
    {
        /*
        Searches for an element in the array arr
        Returns fist index of element if present else returns -1
        */
        if (min_index > max_index){
            return -1;
        }
        else
        {
            //Don't change this assignment of mid_point. It avoids overflow
            int mid_point = min_index + (max_index - min_index)/2;
    
            if (arr[mid_point] > element){
                return bin_search(arr, min_index, mid_point - 1, element);
            }
            else if (arr[mid_point] < element){
                return bin_search(arr, mid_point + 1, max_index, element);
            }
            else{
                return mid_point;
            }
        }
    }
    
    int main()
    {
        int length;
        while (1)
        {
            printf("Enter a positive length: ");
            scanf("%d", &length);
            if (length > 1){
                break;
            }
            else{
                printf("You entered length = %d\n\n", length);
            }
        }
    
        int *arr = malloc(sizeof(int) * length);
        if (arr == NULL)
        {
            perror("The following error occurred");
            exit(-1);
        }
    
        for (int i = 0; i < length; i++){
            scanf("%d", &arr[i]);
        }
    
        int element;
        printf("\nEnter the element to be searched: ");
        scanf("%d", &element);
    
        qsort(arr, length, sizeof(int), compare);
        int index = bin_search(arr, 0, length - 1, element);
    
        if (index == -1){
            printf("\nElement not in the array");
        }
        else{
            printf("\nIndex of element is %d", index);
        }
    
        free(arr);
        return 0;
    }


Thanks to @Josay for pointing out an infinite loop that I didn't know about in the original code.