首页 > 解决方案 > 在使用递归进行二进制搜索编码时,我遇到了一些疑问

问题描述

仅当使用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);
        }
    }
}

标签: javaif-statementrecursionconditional-statements

解决方案


当一个方法在签名中有返回类型时,应该在所有条件下从该方法返回一些东西。并且该检查是在 Java 的编译时进行的。

当您在代码中逻辑地使用if时,该条件可以为真或假。如果这是真的,该方法将从 if 块返回一些东西。但是如果条件为假,方法将不会返回任何东西(因为 if 条件中的代码未执行)。因此,在这种情况下,如果条件结果为假,则方法需要默认返回一些东西。从第一种方法如果所有条件都像

        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);
        }

是假的。方法不会返回任何东西。

另一方面,当您将else 与 if 一起使用(天气是 if-else 或 if-elseIf-else)时,如果 if 为 false(或 elseIf 为 false),则 else 部分将从方法返回一些内容。所以总会有一些东西可以从方法中返回。在第二种方法中

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 条件为真mid,则返回。如果arr[mid]>x为真binarySearch(arr,x,si,mid-1);,将返回结果。如果两者都为真,否则将永远在那里返回一些东西(在你的情况下binarySearch(arr,x,mid+1,ei);)。


推荐阅读