成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)結(jié)構(gòu)與算法之漢諾塔問題(Java遞歸)

yuxue / 730人閱讀

摘要:漢諾塔問題有三根柱子,源桿,暫存桿,目的桿上有層盤子,由小到大向下排列,現(xiàn)需要將桿的盤子移到桿中要求大的盤在下面,小的盤在上面一次只能移動(dòng)一個(gè)盤子個(gè)人思路先分析問題,用數(shù)學(xué)的歸納法當(dāng)只有一個(gè)盤時(shí),直接移動(dòng)當(dāng)有兩個(gè)盤時(shí),先將小的移到暫存桿,再

漢諾塔問題:

有三根柱子,源桿A,暫存桿temp,目的桿C A上有n層盤子,由小到大向下排列,現(xiàn)需要將A桿的盤子移到C桿中

       要求:1)大的盤在下面,小的盤在上面
             2)一次只能移動(dòng)一個(gè)盤子
             
         個(gè)人思路:先分析問題,用數(shù)學(xué)的歸納法
                 當(dāng)只有一個(gè)盤時(shí),直接移動(dòng);
                 當(dāng)有兩個(gè)盤時(shí),先將小的移到暫存桿,再將大的移到目的桿C,最后將暫存桿temp的小盤移到目的桿C中;
                 當(dāng)有三個(gè)盤時(shí),在下面的代碼中的注釋中寫有詳細(xì)步驟
                 ......
                 n個(gè)盤時(shí),把它看做兩部分一是上面的(n-1)盤,二是第n個(gè)盤,先將(n-1)首先將上面的(n-1)個(gè)盤子從A桿借助C桿移至temp桿,其次剩下第n個(gè)盤,直接放至C桿,最后一次遞歸調(diào)用解決即可。
                 
                 其中漢諾塔層數(shù)可以由程序內(nèi)存儲(chǔ)讀取或者鍵盤輸入,c為程序計(jì)數(shù)器,計(jì)算移動(dòng)盤的次數(shù)

import java.util.Scanner;

public class Hanoi {
    int c=0;//計(jì)數(shù)器,計(jì)算移動(dòng)的次數(shù)
    public void moveone(int n, String A, String C) {
        System.out.println("move  " + n + "  from  " + A + "     to  " + C);
    }

    public void movesome(int n, String A, String temp, String C) {

        c++;
    
        if (n <= 0) {
            System.out.println("number error");
            return;
        } else if (n == 1) {
            moveone(n, A, C);
        } else {
            movesome(n - 1, A, C, temp);
            // 首先將上面的(n-1)個(gè)盤子從A桿借助C桿移至temp桿
            moveone(n, A, C);
            // 然后將編號(hào)為n的盤子從A桿移至C桿
            movesome(n - 1, temp, A, C);
//            將剩下的(n-1)個(gè)盤子從temp桿借助A桿移至C桿
        }
        //草稿紙上手寫漢諾塔三層的實(shí)現(xiàn)
//        moveone(1,A,C);
//        moveone(2,A,temp);
//        moveone(1,C,temp);
//        moveone(3, A, C);
//        moveone(1, temp, A);
//        moveone(2, temp, C);
//        moveone(1, A, C);

    }

    public static void main(String[] args) {
       //層數(shù)
        System.out.println("請(qǐng)輸入漢諾塔層數(shù):");
        Scanner input =new Scanner(System.in);
                int  in=input.nextInt();
                int l = 3;

        Hanoi h = new Hanoi();
        //    h.moveone(l,A,C);//程序內(nèi)存儲(chǔ)讀取
        h.movesome(in, "初始位置", "臨時(shí)存放地", "目的地址");
        System.out.println("漢諾塔的實(shí)現(xiàn)需要的移動(dòng)次數(shù):"+h.c);

//        h.movesome(l, "初始位置", "臨時(shí)存放地", "目的地址");

    }
}

程序運(yùn)行結(jié)果:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73732.html

相關(guān)文章

  • 經(jīng)典算法漢諾

    摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)硪粋€(gè)經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時(shí)候,只需要把最大的那個(gè)盤,從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動(dòng)它。 學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)硪粋€(gè)經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門小題目之一吧~ 視頻教程 什么是漢諾塔? 我這里直接拉來一個(gè)圖解釋一下(掛了請(qǐng)聯(lián)系我)sho...

    Lin_R 評(píng)論0 收藏0
  • 經(jīng)典算法漢諾

    摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)硪粋€(gè)經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時(shí)候,只需要把最大的那個(gè)盤,從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動(dòng)它。 學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)硪粋€(gè)經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門小題目之一吧~ 視頻教程 什么是漢諾塔? 我這里直接拉來一個(gè)圖解釋一下(掛了請(qǐng)聯(lián)系我)sho...

    AWang 評(píng)論0 收藏0
  • 漢諾問題

    摘要:概述漢諾塔是一個(gè)經(jīng)典的遞歸問題,雖說看人家寫好的算法程序就那么幾行,但著實(shí)理解有一定的難度。查閱了一些資料,參閱別人的思路,對(duì)漢諾塔算法進(jìn)行一番梳理。問題來源有一個(gè)梵塔,塔內(nèi)有三個(gè)座,座上有若干個(gè)盤子,盤子大小不等,大的在下,小的在上如圖。 概述 漢諾塔是一個(gè)經(jīng)典的遞歸問題,雖說看人家寫好的算法程序就那么幾行,但著實(shí)理解有一定的難度。查閱了一些資料,參閱別人的思路,對(duì)漢諾塔算法進(jìn)行一番...

    RayKr 評(píng)論0 收藏0
  • 遞歸就這么簡(jiǎn)單

    摘要:那么,有了循環(huán),為什么還要用遞歸呢在某些情況下費(fèi)波納切數(shù)列,漢諾塔,使用遞歸會(huì)比循環(huán)簡(jiǎn)單很多很多話說多了也無益,讓我們來感受一下遞歸吧。 遞歸介紹 本來預(yù)算此章節(jié)是繼續(xù)寫快速排序的,然而編寫快速排序往往是遞歸來寫的,并且遞歸可能不是那么好理解,于是就有了這篇文章。 在上面提到了遞歸這么一個(gè)詞,遞歸在程序語言中簡(jiǎn)單的理解是:方法自己調(diào)用自己 遞歸其實(shí)和循環(huán)是非常像的,循環(huán)都可以改寫成遞歸...

    dreamtecher 評(píng)論0 收藏0
  • 從“數(shù)學(xué)歸納法”到理解“遞歸算法”!

    摘要:前言相信大家在面試或者工作中偶爾會(huì)遇到遞歸算法的提問或者編程,我們今天來聊一聊從數(shù)學(xué)歸納法到理解遞歸算法。這種廣義的數(shù)學(xué)歸納法應(yīng)用于數(shù)學(xué)邏輯和計(jì)算機(jī)科學(xué)領(lǐng)域,稱作結(jié)構(gòu)歸納法。 showImg(https://img-blog.csdnimg.cn/20190426221838971.gif);showImg(https://img-blog.csdnimg.cn/20190429222...

    oogh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<