[英]How does a recursive function to find the minimum element of an array work?
我有這種使用遞歸查找數組最小值的方法,我現在正在學習。
public class findMin {
private static int findMin(int[] data, int index) {
int min;
if (index == data.length - 1)//base case
return data[index];
min = findMin(data, index + 1);
if (min < data[index])
return min;
else
return data[index];
}
}
例如,我的數組是int[] numbers = {3, 15, 1, 9, 6, 12, 21, 17, 4};
然后從索引0開始搜索
我的問題是該方法如何拋出整個數組? 我可以看到它檢查了一下,但不是應該循環拋出整個數組嗎?
您正在談論兩種選擇
使用循環時,您會遇到類似
{initial data}
for({initial state} ; {stop condition} ; {incrementation} }
使用遞歸時,您會執行類似的操作。
// call the function the first time
method({initial data}, {initial state});
// inside the method it checks the condition
if ({condition})
return {result}
else
method({data}, {incrementation});
而且,如果您認為使遞歸看起來不必要地復雜且效率低下,那是因為Java基於過程語言,后者傾向於循環,而不是功能語言。 在函數式語言中,通常情況下遞歸更為優雅,而循環則相對困難。
我的問題是方法如何拋出整個數組?
每次該方法自身調用時,它都會遞增索引,並且條件檢查會在最后停止。
我可以看到它檢查但它不應該處於循環中以拋出整個araay嗎?
我不認為循環是解決問題的唯一方法。
注意:當有效支持遞歸時,尾遞歸優化可以將遞歸變成一個循環。 不幸的是,JVM沒有這種優化。
在行中
min = findMin(data, index + 1);
該方法會自行調用。 這使得該方法實質上遍歷了數組,因為每次該方法自身調用時,索引都會增加一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.