どの配列でも最大の要素を得るために再帰を使うという割り当てがあります。私は、最大の要素が配列の最後のものでない限り動作する次のコードを持っています。再帰を使用して配列の中で最大の要素を得る
これを修正する方法がわかりません。
if (myArray.length == 1)
{
return max;
}
はに置き換えます:一つだけの要素を持つ配列の場合
if (myArray.length == 1)
{
return myArray[0] > max ? myArray[0] : max;
}
は、あなたが以前の最大を返す
import java.util.Scanner;
public class RecursionLargestInArray
{
public static void main (String[] args)
{
int max = -999;
Scanner scan = new Scanner (System.in);
System.out.print("Enter the size of the array: ");
int arraySize = scan.nextInt();
int[] myArray = new int[arraySize];
System.out.print("Enter the " + arraySize + " values of the array: ");
for (int i = 0; i < myArray.length; i++)
myArray[i] = scan.nextInt();
for (int i = 0; i < myArray.length; i++)
System.out.println(myArray[i]);
System.out.println("In the array entered, the larget value is "
+ getLargest(myArray, max) + ".");
}
public static int getLargest(int[] myArray, int max)
{
int i = 0, j = 0, tempmax = 0;
if (myArray.length == 1)
{
return max;
}
else if (max < myArray[i])
{
max = myArray[i];
int[] tempArray = new int[myArray.length-1];
for (i = 1; i < myArray.length; i++)
{
tempArray[j] = myArray[i];
j++;
}
tempmax = getLargest(tempArray, max);
return tempmax;
}
else if
{
int[] tempArray = new int[myArray.length-1];
for (i = 1; i < myArray.length; i++)
{
tempArray[j] = myArray[i];
j++;
}
tempmax = getLargest(tempArray, max);
return tempmax;
}
}
}
でそれを呼び出す再帰を開始します。最後に検査した索引を渡すと、すべてのステップで新しい配列を作成する必要はありません。 – helpermethod
最後の要素が最大*の場合にのみ、このコードが機能しないのは確実ですか?それは私のためにコンパイルされません。 – Mike
@Mike - 最後に 'else if'は' else'でなければならないと思います。私はそれを投稿中の誤植に帰した。 –