java - 在使用递归进行二进制搜索编码时,我遇到了一些疑问

标签 java if-statement recursion conditional-statements

当只使用if时,我必须返回一些整数

public class solution {
    
    public static int binarySearch(int arr[], int x,int si,int ei){
        if(si>ei){
            return -1;
        }
        int mid=(si+ei)/2;
        if(arr[mid]==x){
            return mid;
        }
        if(arr[mid]>x){
           return binarySearch(arr,x,si,mid-1);
        }
        if(arr[mid]<x){
           return binarySearch(arr,x,mid+1,ei);
        }
        return 0;
    }

   
}

但是当使用 if-else-if 时,我不必返回任何整数,为什么?

public class solution {
    
    public static int binarySearch(int arr[], int x,int si,int ei){
        if(si>ei){
            return -1;
        }
       
        int mid=(si+ei)/2;
        if(arr[mid]==x){
            return mid;
        }
        else if(arr[mid]>x){
           return binarySearch(arr,x,si,mid-1);
        }
        else {
           return binarySearch(arr,x,mid+1,ei);
        }
    }
}

最佳答案

编译器无法猜测最后一个 if 条件永远为真。所以你必须提供一个返回值,以防它是错误的。即使它永远不会发生。您甚至可以去掉最后一个 if 语句。

    public class solution {
    
    public static int binarySearch(int arr[], int x,int si,int ei){
        if(si>ei){
            return -1;
        }
        int mid=(si+ei)/2;
        if(arr[mid]==x){
            return mid;
        }
        if(arr[mid]>x){
           return binarySearch(arr,x,si,mid-1);
        }
        return binarySearch(arr,x,mid+1,ei);
    }

   
}

关于java - 在使用递归进行二进制搜索编码时,我遇到了一些疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63280280/

相关文章:

Java连续计算coinFlip正面,如何突出显示连胜事件

recursion - 如何将递归函数的值返回到数组

java - 如何使用 LoadingCache 将递归转换为迭代?

java - 在 Java 中转置 ArrayList<ArrayList<String>>

java - 在 Intellij IDE 中导入 Maven 项目后,所有 java 选项都丢失

c - 从 C 中的 if 语句返回一个字符串

c - 我的 if 语句返回意外结果

java.rmi.NoSuchObjectException 但添加了静态引用

java - Java中如何按类的属性进行分组

recursion - LISP-- 递归回文