gpt4 book ai didi

java - 使用递归查找数组中的最小数

转载 作者:行者123 更新时间:2023-11-30 02:59:18 25 4
gpt4 key购买 nike

当我剖析代码的逻辑时,它对我来说很有意义并且看起来应该可以工作。我需要使用递归查找并返回数组中的最小数字。这是我的代码

public static int findMin(int[] numbers, int start, int last)
{
int min = numbers[start]; // sets first value in array to minimum

if(numbers[start]<numbers[last]&& numbers[start]<min)
{ // if 1st value < last value in array and 1st value smaller than min, set min to first value
min = numbers[start];

}
else if(numbers[start]>numbers[last]&& numbers[last] < min)
{ // if 1st value > last value and last value < min, set min to last value
min = numbers[last];
}
else
{ // if 1st and last value are equal returns 1st value
return numbers[start];
}
// recursively calls... or not
findMin(numbers, start+1, last-1);
return min;
}

使用的输入是 33-55, -44, 12312, 2778, -3, -2, 53211, -1, 44, 0

输出获取:

最小数量为0线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:-1 在Assignment9.countEven(Assignment9.java:72) 在Assignment9.countEven(Assignment9.java:87) 在Assignment9.main(Assignment9.java:34)

预期:-55

我假设我的递归调用放置不正确。请帮忙,谢谢。

最佳答案

这应该可以解决问题

public static int findMin(int[] numbers, int start, int last)
{
if(start == last) return numbers[0];
return Math.min(numbers[start],findMin(numbers, start+1, last));
}

如果由于某种原因您无法使用 Math.min,您始终可以使用:

public static int findMin(int[] numbers, int start, int last)
{
if(start == last) return numbers[0];

int min = findMin(numbers, start+1, last);

return (numbers[start] <= min) ? numbers[start] : min;
}

主要问题或解决方案是:

-> 您没有正确检查停止情况;

-> 您没有使用每次递归调用中计算的最小值;

-> 并且您没有检查超出数组限制的情况。

关于java - 使用递归查找数组中的最小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com