我需要編寫的Java代碼以下問題有所幫助遞歸Java方法:編寫發現在int類型的數組中的最小值和最大值,而不使用任何環
寫遞歸Java方法它可以在不使用任何循環的情況下在int值數組中找到最小值和最大值。
所有幫助表示讚賞。
我需要編寫的Java代碼以下問題有所幫助遞歸Java方法:編寫發現在int類型的數組中的最小值和最大值,而不使用任何環
寫遞歸Java方法它可以在不使用任何循環的情況下在int值數組中找到最小值和最大值。
所有幫助表示讚賞。
這裏是你如何能想象這個問題最大:
您的數據能夠像
{a, b, c, d, e}
你可以找到ma X使用這種方法
max(a, max(restOfElements))
這意味着你需要再次使用
max(a, max(b, max(restOfElements)))
.
.
.
max(a, max(b, max(c, max (d, max(e, nothing)))))
可以那麼到底,甚至更好,因爲
max(a, . . . . )
max(b, . . . )
max(c, . . )
max (d, . )
max(e, nothing)
可視化你有兩種情況,你的方法
e
,所以你不能把它與任何e
第一種情況,因爲沒有什麼比較否則與它進行比較。鍛鍊,還可以實現略有不同的方法(可能用它來分鐘)
max(max(restOfElements),lastElement)
,這將導致你
max(max(max(max(max(a,nothing),b),c),d),e)
實際上,我應該投下這個微不足道的答案給這個微不足道的作業問題:) –
@RalfH我會downvote自己,如果會有代碼示例在我的答案(我試圖堅持規則「沒有代碼在作業問題,沒有代碼的答案)Bud我不相信給出一般解決方案的描述是非常糟糕的,OP將不得不以他/她自己的方式實現這個解決方案,這會留下許多決策,比如如何限制搜索範圍(如何通知方法什麼應該與什麼比較)和其他幾個。我試圖給OP一點點推動方向(S)他正在尋找。 – Pshemo
一種方法是定義一個返回整數數組的方法。第一個位置將包含最小值,第二個位置包含最大值。
您可以定義簽名的方法:
static int[] minAndMax(int[] arr, int[] minAndMax, int from)
你需要找到合適的終止條件。完成之後,下一步是比較您在陣列中掃描的當前值並檢查最小值和最大值。 之後,遞歸調用該方法來掃描數組中的下一個值。
這裏的初始化的例子:
public static void main(String[] args){
int[] arr = {-1, -4, 2, 10, 2};
System.out.println(Arrays.toString(minAndMax(arr,
new int[]{arr[0], arr[0]},
1)));
}
,輸出: [-4, 10]
給你一個解決方案,試圖儘可能直觀地理解:
package test;
import java.util.Arrays;
public class Recursion {
public static void main(String[] args) {
int[] example = {0,3,-5,7,2,0,4,6,33,-56,2,4,8,3,6,6,6,78,3};
System.out.println(getMin(example));
System.out.println(getMax(example));
}
static int getMin(int[] arrayOfInts){
if(arrayOfInts == null || arrayOfInts.length == 0)
throw new IllegalArgumentException();
if(arrayOfInts.length == 1)
return arrayOfInts[0];
if(arrayOfInts.length == 2)
return Math.min(arrayOfInts[0], arrayOfInts[1]);
return Math.min(arrayOfInts[0], getMin(Arrays.copyOfRange(arrayOfInts, 1, arrayOfInts.length)));
}
static int getMax(int[] arrayOfInts){
if(arrayOfInts == null || arrayOfInts.length == 0)
throw new IllegalArgumentException();
if(arrayOfInts.length == 1)
return arrayOfInts[0];
if(arrayOfInts.length == 2)
return Math.max(arrayOfInts[0], arrayOfInts[1]);
return Math.max(arrayOfInts[0], getMax(Arrays.copyOfRange(arrayOfInts, 1, arrayOfInts.length)));
}
}
使用循環編寫代碼很容易,問題在於遞歸。事情是,如何定義第一個元素而不使用循環。 –
沒有循環?爲什麼,這很難 –
是的,這是不幸的問題的主要觀點。 –