一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

遞歸

 厶汀 2013-10-25

遞歸是函數(shù)調(diào)用自身的一種特殊的編程技術(shù),其應(yīng)用主要在以下幾個方面:

階乘

java當中的基本形式是:Public  void  mothedint n{//當滿足某條件時:

                                                              Mothedn-1);

}

遞歸二分查找

Java二分查找實現(xiàn),歡迎大家提出交流意見.

/**
*
名稱:BinarySearch
*
功能:實現(xiàn)了折半查找(二分查找)的遞歸和非遞歸算法.
*
說明:
*     1
、要求所查找的數(shù)組已有序,并且其中元素已實現(xiàn)Comparable<T>接口,Integer、String.
*    2
、非遞歸查找使用search();,遞歸查找使用searchRecursively();
*
*
本程序僅供編程學(xué)習(xí)參考
*
*@author:   Winty
*@date:     2008-8-11
*@email:    [email]wintys@gmail.com[/email]
*/

class BinarySearch<T extends Comparable<T>> {
    private T[]  data;//
要排序的數(shù)據(jù)

    public BinarySearch(T[] data){
        this.data = data;
    }

    public int search(T key){
        int low;
        int high;
        int mid;

        if(data == null)
            return -1;

        low = 0;
        high = data.length - 1;

        while(low <= high){
            mid = (low + high) / 2;
            System.out.println("mid " + mid + " mid value:" + data[mid]);///
            
            if(key.compareTo(data[mid]) < 0){
                high = mid - 1;
            }else if(key.compareTo(data[mid]) > 0){
                low = mid + 1;
            }else if(key.compareTo(data[mid]) == 0){
                return mid;
            }
        }

        return -1;
    }

    private int doSearchRecursively(int low , int high , T key){
        int mid;
        int result;

        if(low <= high){
            mid = (low + high) / 2;
            result = key.compareTo(data[mid]);
            System.out.println("mid " + mid + " mid value:" + data[mid]);///
            
            if(result < 0){
                return doSearchRecursively(low , mid - 1 , key);
            }else if(result > 0){
                return doSearchRecursively(mid + 1 , high , key);
            }else if(result == 0){
                return mid;
            }
        }
        
        return -1;
    }

    public int searchRecursively(T key){
        if(data ==null)return -1;

        return doSearchRecursively(0 , data.length - 1 , key);
    }

    public static void main(String[] args){
        Integer[] data = {1 ,4 ,5 ,8 ,15 ,33 ,48 ,77 ,96};
        BinarySearch<Integer> binSearch = new BinarySearch<Integer>(data);
        //System.out.println("Key index:" + binSearch.search(33) );

        System.out.println("Key index:" + binSearch.searchRecursively(3) );

        //String [] dataStr = {"A" ,"C" ,"F" ,"J" ,"L" ,"N" ,"T"};
        //BinarySearch<String> binSearch = new BinarySearch<String>(dataStr);
        //System.out.println("Key index:" + binSearch.search("A") );
    }
}

遞歸排序

其實在數(shù)組的全排序中完全可以使用更加易懂簡便的寫法——for循環(huán),但是通過for循環(huán)編寫數(shù)組全排序需要有一個先決條件——知道數(shù)組全排序的個數(shù),因為有n個數(shù)據(jù)全排序就需要寫n個嵌套for循環(huán)。因此在寫全排序時一般使用遞歸方法。這就是我的第一個關(guān)于遞歸排序的見解——遞歸排序可以無需已知排序數(shù)組的長度,即排序個數(shù)!

其二,不管是使用遞歸進行數(shù)組排序還是使用for循環(huán)進行數(shù)組的排序,它們都是本質(zhì)都是使用枚舉,因此可以得出這樣一個結(jié)論:枚舉可以確保找出每一種可能的排序規(guī)則!

其三,枚舉是列出所有的方法并找出符合要求的算法,因此其算法效率一定比較的低,需要對其進行優(yōu)化,才能達到較好的效果(遞歸的時候排除所有不可能的方案)

消除遞歸

消除遞歸的基本思路是用棧來模擬系統(tǒng)的函數(shù)調(diào)用從而消除遞歸。

基本上要做一下三件事:傳遞參數(shù)(包括返回地址)并轉(zhuǎn)到函數(shù)入口;獲得參數(shù)并處理參數(shù);根據(jù)傳入的返回地址返回

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲精品国产福利在线| 高潮日韩福利在线观看| 日韩欧美中文字幕人妻| 国产亚洲中文日韩欧美综合网 | 女人高潮被爽到呻吟在线观看| 亚洲欧洲日韩综合二区| 欧美六区视频在线观看| 成年人黄片大全在线观看| 国产传媒精品视频一区| 日韩精品毛片视频免费看| 国产精品推荐在线一区| 精品国产一区二区欧美| 高清不卡一卡二卡区在线| 精品一区二区三区不卡少妇av| 国产亚洲精品久久久优势| 日韩毛片视频免费观看| 国产水滴盗摄一区二区| 亚洲欧洲精品一区二区三区| 东京热加勒比一区二区三区| 精品一区二区三区中文字幕| 国产伦精品一区二区三区高清版| 夫妻性生活黄色录像视频| 蜜桃av人妻精品一区二区三区| 好吊视频一区二区在线| 国产成人在线一区二区三区 | 亚洲一区二区三区福利视频| 亚洲一区二区精品久久av| 亚洲淫片一区二区三区| 日本东京热加勒比一区二区| 国产精品一区二区不卡中文| 丰满人妻一二区二区三区av| 偷拍偷窥女厕一区二区视频| 麻豆印象传媒在线观看| 这里只有九九热精品视频| 国产中文字幕一二三区| 亚洲最新av在线观看| 性欧美唯美尤物另类视频| 91亚洲人人在字幕国产 | 欧美字幕一区二区三区| 亚洲精品福利视频你懂的| 91免费一区二区三区|