c - 递归二进制搜索函数缺少什么? (C)

标签 c function recursion binary-search

我正在尝试创建一个对排序数组进行二分查找的函数。我检查了一切,一切正常,除了一件事:

如果我没有在函数末尾放置一个 return 语句,没有被 If 包围,它就不会构建我的程序。如果我输入“return 0”,无论如何它都会返回 0。如果我对 1 做同样的事情,它总是会返回 1,而且我看不出我的问题在哪里。希望得到一些帮助。

#include <stdio.h>
#define N 4
int search_matrix(int a[N][N], int x);
int binsearch(int a[], int x, int low, int high);
int main(){
    int a[N][N];
    printf("Please Enter Matrix : \n");
    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++){
            scanf("%d",&a[i][j]);
        }//forj
    }//fori
    printf("Please enter x : \n");
    int x;
    scanf("%d",&x);

    printf("%d\n",search_matrix(a,x));
    return 0;
}
int search_matrix(int a[N][N], int x){
    if(x>a[0][N-1]||x<a[N-1][0])
        return 0;

    int savedIndex=0;
    for(int i=0;i<N;i++){
        if(x>a[i][0]){
            savedIndex=i;
            break;
        }
    }//for

    return(binsearch(a[savedIndex],x,0,N));

}//search_matrix

//------- THE PROBLEMATIC FUNCTION! ---------
int binsearch(int a[], int x, int low, int high) {
   int mid;
   if (low > high)
      return 0;
   mid = (low + high) / 2;
    if (x == a[mid]) {
      return 1;
   } else if (x < a[mid]) {
      binsearch(a, x, low, mid - 1);
   } else {
      binsearch(a, x, mid + 1, high);
   }


}

最佳答案

检查一下:

    #include<stdio.h>
    #define N 4
    int search_matrix(int a[N][N], int x);
    int binsearch(int a[], int x, int low, int high);
    int main(){
        int a[N][N], i, j;
        printf("Please Enter Matrix : \n");
        for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                scanf("%d",&a[i][j]);
            }//forj
        }//fori
        printf("Please enter x : \n");
        int x;
        scanf("%d",&x);

        printf("%d\n",search_matrix(a,x));
        return 0;
    }
    int search_matrix(int a[N][N], int x){
        if(x>a[0][N-1]||x<a[N-1][0])
            return 0;

        int savedIndex=0, i;
        for(i=0;i<N;i++){
            if(x>a[i][0]){
                savedIndex=i;
                break;
            }
        }//for

        return(binsearch(a[savedIndex],x,0,N));

    }//search_matrix

    //------- THE PROBLEMATIC FUNCTION! ---------
    int binsearch(int a[], int x, int low, int high) {
       int mid;
       if (low > high)
          return 0;
       mid = (low + high) / 2;
        if (x == a[mid]) {
          return 1;
       } else if (x < a[mid]) {
          binsearch(a, x, low, mid - 1);
       } else {
          binsearch(a, x, mid + 1, high);
       }


    }

关于c - 递归二进制搜索函数缺少什么? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836498/

相关文章:

c++ - 有没有在 C/C++ 中定义数据类型的情况下从用户那里获取输入

c - 在 C 中,当头指针位置未知时,在单个链表中插入节点

C 程序 : how to parse csv string using a loop?

c++ - 为什么函数名称被归类为 L 值表达式?

使用生成器的Pythonic树枚举器方法

c++ - 在进行并行搜索时,内存带宽何时会成为限制因素?

java - java中函数中的函数

matlab - 如何将函数应用于 MATLAB 中矩阵的每一行/列?

recursion - 为什么 F# 对堆栈大小施加下限?

javascript - 获取 JSON 树给定级别的节点数