gpt4 book ai didi

java - 在 Java 中使用指定的开始和结束索引查找数组中的最大整数,**递归**

转载 作者:行者123 更新时间:2023-12-01 19:26:48 25 4
gpt4 key购买 nike

对于我正在处理的事情,我需要一个整数数组,并从用户那里获取两个索引。一个是数组的起点,另一个是终点。有了这两点,我必须递归地找到数组中的最大值。我目前拥有的代码可以工作,但我觉得有些东西可以使其更加流畅,甚至也许我可以做一些不同的事情来摆脱一些无用的代码。我将在下面发布我的代码。

import java.util.Scanner;

public class RecursiveProblem {

public static void main(String args[]) {
int start, end, size, max;
Scanner scan = new Scanner(System.in);

System.out.println("How many numbers would you like to enter in total?");
size = scan.nextInt();
int[] myArray = new int[size];

System.out.println("Please enter the specified starting index.");
start = scan.nextInt() - 1;

System.out.println("Please enter the specified ending index.");
end = scan.nextInt() - 1;

System.out.println("Please enter " + size + " integers seperated by a space, or press "
+ "enter after each number: ");
for(int i = 0; i < myArray.length; i++) {
myArray[i] = scan.nextInt();
}
scan.close();

max = myArray[start];

max = findMax(myArray, start, end, max);

System.out.println("The max of your array between the indices of " + (start + 1) +
"-" + (end + 1) + " is..." + max);

}

public static int findMax(int[] myArray, int start, int end, int max) {
if(start < end) {
if(myArray[start + 1] > max) {
start++;
max = myArray[start];
return findMax(myArray, start, end, max);
}
else {
start++;
return findMax(myArray, start, end, max);
}
}
return max;
}
}

我主要困惑的一件事,但不是我唯一的问题 - 是每当我选择将 start++ 命令放在 findMax(myArray, start++, end, max) <--( 就像这样),最终会陷入无限递归。我很困惑为什么这会导致无限递归,但我这样做的方式却不会。预先感谢您帮助清理代码并帮助我解决问题!

最佳答案

您的代码总体来说还不错,但如果您想要简洁的内容,可以使用下面的代码:

//Before calling this particular method, you'll have to set the max to 
//Integer.MINIMUM_VALUE so it's guaranteed to be changed later OR call it
//with start + 1 instead of start
public static int findMax(int[] myArray, int start, int end, int max) {
return (start < end) ?
findMax(myArray,
start + 1,
end,
(myArray[start] > max) ? myArray[start] : max))
: max;
}

无限重复的原因是后增量运算符的工作方式。

当您说start++时,它会将start的值插入堆栈,然后在后台递增。因此,作为独立语句很好,但是当您将其编写为 findMax(myArray, start++, end, max) 时,它实际上与调用 findMax(myArray, start, end, max) 是一样的),因为参数 start 确实没有改变。

关于java - 在 Java 中使用指定的开始和结束索引查找数组中的最大整数,**递归**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61311316/

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