關於遞歸與二分查找技術

簡單的說,遞歸就是函數自己調用自己。在數據結構裏面會經常使用遞歸,因爲遞歸代碼比較簡潔優雅,易懂。

編寫遞歸程序時主要注意三點

(1)遞歸總有一個最簡單的情況,方法的第一條語句總是包含return的條件語句

(2)遞歸調用總是去嘗試解決一個規模更小的子問題,這樣遞歸才能收斂到最簡單的情況。在下面代碼中,第四個參數和第三個參數的差值一直在縮小

(3)遞歸調用的父問題和嘗試解決的子問題之間不應該有交集。在如下代碼中,兩個子問題,各自操作的數組部分是不同的

下面是二分法查找的遞歸實現和非遞歸實現;

特別注意一點,二分查找技術,是針對有序的數組和順序表,不能忘記前提


//使用遞歸實現二分法查找,同時使用函數重載
    public static int rank(int key,int a[])
    {
        return rank( key,a,0,a.length-1);
    }
    public static int rank(int key,int[]a,int lo,int hi)
    {
        if(lo>hi)
            return -1;
        int mid=lo+(hi-lo)/2;
        if(key<a[mid])
            return rank(key,a,lo,mid-1);
        else if(key>a[mid])
            return rank(key,a,mid+1,hi);
        else
            return mid;
    }

二分查找算法的非遞歸實現

public static int BinarySearch(int arr[],int key)
{
    int low,high,mid;
    low=0;
    high=arr.length-1;
    while(low<=high)
    {
        mid=low+(high-low)/2;
        if(key<arr[mid])
            high=mid-1;
        else if(key>arr[mid])
            low=mid+1;
        else
            return mid;
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章