2014-12-05 24 views
-1

所以基本上我嘗試構造一個遞歸函數來對已排序的數組執行二分搜索,儘管我很清楚在它後面流動的基本邏輯,但問題出現在我只需要傳遞三個參數給函數,它們是數組,它的大小和要搜索的項目。我知道我必須在數組的上半部分調用函數,如果該項位於數組的後一部分,反之亦然,但我該怎麼做?我在內部製作兩個新陣列,我該如何做到這一點?我很困惑使用遞歸只使用三個參數表在數組上進行二進制搜索

+0

whay將數組和它的大小添加爲不同的參數?大小是數組的屬性。 – Dennis 2014-12-05 14:49:16

+0

請考慮添加標籤,指出您正在使用/感興趣的編程語言。 – 2014-12-05 14:57:10

+0

@Dennis,即假設他們使用的是提供大小或長度的語言。 – ChiefTwoPencils 2015-02-15 06:11:17

回答

-1

你甚至可以用2個參數來做。這裏是我的僞代碼:

find(array, item){ 
    //base case to return the item if found 
    if(array.length == 1 && array[0].equals(item)) { 
    return array[0]; 
    } 
    else { 
    return null; 
    } 

    //decide in which half to continue the search 
    if(array[array.length/2] >= item) { 
    return find(createSubArray(array, 0, array.length/2 -1); 
    } 
    else { 
    return find(createSubArray(array, array.length/2, array.length-1); 
    } 

    //never reached 
    return null; 
} 

這不會保護傳遞給方法的空數組或空值。

0

如果你在C/C++中這樣做的關鍵是要意識到數組作爲指針傳遞。因此,每次您遞歸調用函數時,都可以使用指針算術和明智選擇的大小指定數組的哪一部分。