<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java實(shí)現(xiàn)的經(jīng)典遞歸算法三例

      java實(shí)現(xiàn)的經(jīng)典遞歸算法三例


      一、寫作此文的原因:
        學(xué)過程序設(shè)計(jì)的朋友都知道,存在自調(diào)用的算法稱作遞歸算法。 遞歸往往能給我們帶來非常簡(jiǎn)潔非常直觀的代碼形勢(shì),從而使我們的編碼大大簡(jiǎn)化,然而遞歸的思維確實(shí)很我們的常規(guī)思維相逆的,我們通常都是從上而下的思維問題, 而遞歸趨勢(shì)從下往上的進(jìn)行思維,正由于此,很多人對(duì)于遞歸有著深深的恐懼,我曾經(jīng)也是如此,如今為把我的經(jīng)驗(yàn)通過幾個(gè)經(jīng)典的例子與初學(xué)者共享,故作此文,希望能對(duì)需要者有所助益,如若如此,便是幸甚……

        二、遞歸算法設(shè)計(jì)的基本思想是:對(duì)于一個(gè)復(fù)雜的問題,把原問題分解為若干個(gè)相對(duì)簡(jiǎn)單類同的子問題,繼續(xù)下去直到子問題簡(jiǎn)單到能夠直接求解,也就是說到了遞推的出口,這樣原問題就有遞推得解。

        關(guān)鍵要抓住的是:

        (1)遞歸出口

        (2)地推逐步向出口逼近

        三、具體說明

        1.漢諾塔

        這是遞歸的超經(jīng)典的例子,幾乎每本程序設(shè)計(jì)書上談到遞歸都會(huì)介紹。具體情景不再贅述。以我上述的方法觀之:(1)遞歸的出口在于disk數(shù)為一的時(shí)候

        (2)向出口逼近:如果不是一,是n ,則我們先挪動(dòng)上面n-1塊disk,等上面挪完,即遞歸返回的時(shí)候,我們挪動(dòng)最底下的disk.

        僅僅如此,一個(gè)貌似十分復(fù)雜的問題就解決了,因?yàn)榕矂?dòng)那n-1塊disk的時(shí)候,會(huì)繼續(xù)向上減少,直到disk的數(shù)量為一為止。下面給出java程序編碼(已測(cè)試過,運(yùn)行正常):

        import javax.swing.JOptionPane;

        public class Hanoi {

        private static final String DISK_B = "diskB";

        private static final String DISK_C = "diskC";

        private static final String DISK_A = "diskA";

        static String from=DISK_A;

        static String to=DISK_C;

        static String mid=DISK_B;

        public static void main(String[] args) {

        String input=JOptionPane.showInputDialog("please input the number of the disks you want me move.");

        int num=Integer.parseInt(input);

        move(num,from,mid,to);

        }

        private static void move(int num, String from2, String mid2, String to2) {

        if(num==1){

        System.out.println("move disk 1 from "+from2+" to "+to2);

        }

        else {

        move(num-1,from2,to2,mid2);

        System.out.println("move disk "+num+" from "+from2+" to "+to2);

        move(num-1,mid2,from2,to2);

        }

        }

        }

        2.這是一個(gè)排列的例子,它所做的工作是將輸入的一個(gè)字符串中的所有元素進(jìn)行排序并輸出,例如:你給出的參數(shù)是"abc" 則程序會(huì)輸出:

        abc

        acb

        bac

        bca

        cab

        cba

        (1)算法的出口在于:low=high也就是現(xiàn)在給出的排列元素只有一個(gè)時(shí)。

        (2)算法的逼近過程:先確定排列的第一位元素,也就是循環(huán)中i所代表的元素,

        然后low+1開始減少排列元素,如此下去,直到low=high

        public static void permute(String str) {

        char[] strArray = str.toCharArray();

        permute(strArray, 0, strArray.length - 1);

        }

        public static void permute(char[] list, int low, int high) {

        int i;

        if (low == high) {

        String cout = "";

        for (i = 0; i <= high; i++)

        cout += list[i];

        System.out.println(cout);

        } else {

        for (i = low; i <= high; i++) {

        char temp = list[low];

        list[low] = list[i];

        list[i] = temp;

        permute(list, low + 1, high);

        temp = list[low];

        list[low] = list[i];

        list[i] = temp;

        }

        }

        }

        3。這是一個(gè)組合的例子,與上述的例子相似,只是它所做的工作是,輸出所給字符串中制定數(shù)目的元素的組合種類

        (1)程序出口在于n=1,此時(shí)只要輸出目標(biāo)數(shù)組的所有元素即可

        (2)逼近過程,當(dāng)n>1 的時(shí)候,我們先取第一個(gè)元素放入目標(biāo)數(shù)組中,然后n-1,如此下去,最后出來。

        import javax.swing.JOptionPane;

        public class Combination {

        /**

        * @param args

        */

        public static void main(String[] args) {

        String input = JOptionPane.showInputDialog("please input your String: ");

        String numString = JOptionPane.showInputDialog("please input the number of your Combination: ");

        int num = Integer.parseInt(numString);

        Combine(input, num);

        }

        private static void Combine(String input, int num) {

        char[] a = input.toCharArray();

        String b = "";

        Combine(a, num, b, 0, a.length);

        }

        private static void Combine(char[] a, int num, String b, int low, int high) {

        if (num == 0) {

        System.out.println(b);

        } else {

        for (int i = low; i < a.length; i++) {

        b += a[i];

        Combine(a, num - 1, b, i+1, a.length);

        b=b.substring(0, b.length()-1);

        }

        }

        }

        }

       

      本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/andilyliao/archive/2007/10/26/1845039.aspx

      posted @ 2010-01-16 14:40  vipbooks  閱讀(677)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精品天干天干综合网| 人妻人人妻a乱人伦青椒视频 | 2021国产成人精品久久| 精品无码国产污污污免费| 国产亚洲精品VA片在线播放| 国产稚嫩高中生呻吟激情在线视频| 国产一精品一av一免费| 最近2019免费中文字幕8| 99久久精品国产熟女拳交| 久久精品中文字幕少妇| 久爱无码精品免费视频在线观看| 一个人在线观看免费中文www| 精品久久精品久久精品九九 | 开心激情站开心激情网六月婷婷| 久久久精品午夜免费不卡| 国产偷国产偷亚洲综合av| 中文字幕日韩有码国产| 无码精品国产va在线观看| 日韩卡一卡2卡3卡4卡| 免费无码又爽又刺激网站直播| 欧美日韩一线| 无码av中文一区二区三区桃花岛| 99久久无色码中文字幕| 高清偷拍一区二区三区| 国产在线午夜不卡精品影院 | 日本又色又爽又黄的a片吻戏| 久久精品亚洲国产成人av| 人妻av无码系列一区二区三区| 国产精品国产自产拍高清| 在线 | 国产精品99传媒a| 性色av无码不卡中文字幕| 日本中文字幕在线播放| 国模少妇无码一区二区三区| 8x国产精品视频| 国内精品无码一区二区三区 | 婷婷四虎东京热无码群交双飞视频 | 青青青青国产免费线在线观看| 久久精品国产久精国产果冻传媒| 日本熟妇大乳| 中文字幕亚洲综合第一页| 午夜国产精品福利一二|