当前位置: 首页 > 知识库问答 >
问题:

返回错误位置的二分搜索程序

郑星辰
2023-03-14

我写了一个二分搜索的递归程序,正如你所看到的,我试图在给定的数组中找到目标=21的位置,然后返回位置为2。但是,我的输出是1。当我调试它匹配att arr[start]=target时,它直接跳到findTheNumber(arr,mid+1,end,target)行;然后下一行,然后返回mid..只是想知道为什么我的返回在“返回开始”时中断了

 package Recursion;

 public class BinarySearch {
 static int  mid = 0;

 public static int findTheNumber(int[] arr, int start, int end, int target) {


    if (arr[start] == target) {
        return start;
    }

    mid = (start + end) / 2;

    if (arr[mid] == target) {
        return mid;
    } 

    if (target >arr[mid]) {
            findTheNumber(arr, mid + 1, end, target);
        } else if (target <arr[mid]) {
            findTheNumber(arr, start, mid-1, target);
        }
        return mid;
    }



public static void main(String[] args) {
    int[] arr = { 10, 12,21 };
    int start = 0;
    int end = arr.length - 1;

    int target = 21;

    System.out.println(findTheNumber(arr, start, end, target));

}

}

共有1个答案

阚夕
2023-03-14
if (target >arr[mid]) {
    findTheNumber(arr, mid + 1, end, target);
} else if (target <arr[mid]) {
    findTheNumber(arr, start, mid-1, target);
}

您只是在那里返回mid点,而不是递归调用的实际结果。
代码应该如下所示:

if (target >arr[mid]) {
    return findTheNumber(arr, mid + 1, end, target);
} else if (target <arr[mid]) {
    return findTheNumber(arr, start, mid-1, target);
}
 类似资料:
  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来

  • 代码是一个简单的二分搜索程序。我试着追踪程序,但它只会让我更加困惑。我不明白为什么嵌套的if has data,min,midpoint-1,&target和底部的else if语句has data,midpoint+1,max,target。

  • 该问题出现在IntellJ 14.1.4社区版中。Gradle直到今天都能很好地构建项目,同样的代码在其他机器上也能很好地构建。 我得到了这个错误:“找不到ormlite-core-4.48.jar(com.j256.ormlite:ormlite-core:4.48)。在以下位置搜索:https://repo1.maven.org/maven2/com/j256/ormlite/ormlite-

  • Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. He

  • 在本地开发环境中使用Eclipse(Mars.1发行版(4.5.1))中的Forge 1.8.9。 在环游世界一小段时间后,然后注销该世界并返回(同一个会话中,退出并关闭MC),世界将无法出现在控制台中。该位置与“一切正常”登录中的位置相同。另外还有一个错误的位置!错误 控制台的错误如下: 我已经尝试过一些变化,包括Minecraft Forge:使用正确的连接游戏侦听器进行设置位置和角度,但不使