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

資訊專(zhuān)欄INFORMATION COLUMN

經(jīng)典算法:漢諾塔

Lin_R / 1275人閱讀

摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時(shí)候,只需要把最大的那個(gè)盤(pán),從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動(dòng)它。

學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門(mén)小題目之一吧~

視頻教程 什么是漢諾塔?

我這里直接拉來(lái)一個(gè)圖解釋一下(掛了請(qǐng)聯(lián)系我)

就是這么一個(gè)東西了,把所有的圓盤(pán)從左邊移動(dòng)到右邊,并且大的圓盤(pán)不能夠壓住小的。怎么才能完成呢?

規(guī)則理解了,開(kāi)始鉆牛角尖

先來(lái)看看只有一個(gè)圓盤(pán)的情況,

嗯 相當(dāng)?shù)暮?jiǎn)單 A--->C 就可以了

兩個(gè)的情況呢? 也不難 A--->B A--->C B--->C

三個(gè)的話(huà)有點(diǎn)挑戰(zhàn)了 大家自己推一推

好的 十個(gè)呢?就算想了半天弄好了,怎么讓程序幫我們做呢?頭大!

牛角尖鉆完了,冷靜分析

在我們每次距離對(duì)稱(chēng)最近的狀態(tài),都是把最大的圓盤(pán)放到了最右邊,剩下的圓盤(pán)放到了中間。

然后把中間的再都放到右邊就好了

這道理就跟把大象裝冰箱一樣啊 都是三步呢!

這時(shí)候千萬(wàn)不要去想怎么把n-1層都搬到B柱 也不要想怎么把N-1層都搬到C柱,如果繼續(xù)想下去你就會(huì)進(jìn)入死循環(huán),這時(shí)候你只需要做一個(gè)思維轉(zhuǎn)換。

當(dāng)我們把n-1層都搬到了中間柱的時(shí)候,只需要把最大的那個(gè)盤(pán),從A搬到C柱就好了,剩下的怎么辦呢?C柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動(dòng)它。這時(shí)候我們大點(diǎn)力!把B柱子掰下來(lái)!扔到A前面!無(wú)視掉C柱上面的大圓盤(pán),因?yàn)槲覀儾粫?huì)再去動(dòng)它了!是不是畫(huà)面似曾相識(shí)?對(duì)??!遞歸?。±^續(xù)把最左邊的n-1層都弄到中間,最大的扔到C就好了?。?/p>

看到這里如果你還在鉆牛角尖的話(huà),可以暫時(shí)休息一下了。

思維轉(zhuǎn)換完成的過(guò)來(lái)寫(xiě)代碼!
// JS寫(xiě)一下
function move(num,from,button,to){
    // 如果只有一個(gè)圓盤(pán)
    if(num==1){
        console.log(from,"---->",to)
        // 最左邊的放到最后邊完了個(gè)事!
        return
    }
    // 如果柱子有點(diǎn)多咋辦呢?
    // 先把n-1個(gè)左邊的放到中間唄
    move(num-1,from,to,button) //放過(guò)去了,具體過(guò)程是啥?我特么哪里知道 它里面怎么操作?管他呢,反正他自己知道自己干了啥
    console.log(from,"---->",to) // 我就干一件事,我就把左邊最大的放到右邊,雖然我不知道現(xiàn)在我是不是真正的左邊,我可能是被你大力從中間拽過(guò)來(lái)的左邊。
    // 放完了然后呢?
    // 把所有中間的柱子扔到最右邊去
    move(num-1,button,from,to)
}

move(3,"A","B","C") //測(cè)試一下
//golang
package main

import (
    "fmt"
)

func main() {
    move(3,"A","B","C")
}

func move(num int,from string,button string,to string){
    if num==1 {
        fmt.Printf("%s--->%s
",from,to)
        return
    }
    move(num-1,from,to,button)
    fmt.Printf("%s--->%s
",from,to)
    move(num-1,button,from,to)
}
# python

def move(num ,fro,button,to)
    if (num==1)
        print(fro,"--->",to)
        return
    move(num-1,fro,to,button)
    print(fro,"--->",to)
    move(num-1,button,fro,to)
move(3,"A","B","C")
總結(jié)

遞歸這個(gè)東西,千萬(wàn)不可鉆牛角尖,把大問(wèn)題分成小問(wèn)題,復(fù)雜問(wèn)題簡(jiǎn)單化,如果非要把遞歸過(guò)程推出來(lái)的話(huà),那誰(shuí)都救不了你

歡迎大家關(guān)注我的博客,里面會(huì)有我所寫(xiě)博客的視頻版本,如果你有更多疑問(wèn)或者想學(xué)前端的話(huà),可以加我微信shouzi_1994或者在博客下方品論留言,三大Q.

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

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

相關(guān)文章

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

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

    AWang 評(píng)論0 收藏0
  • 堆棧的應(yīng)用——用JavaScript描述數(shù)據(jù)結(jié)構(gòu)

    摘要:一實(shí)現(xiàn)一個(gè)棧類(lèi)基于堆棧的特性,可以用數(shù)組做線(xiàn)性表進(jìn)行存儲(chǔ)。出棧出棧同樣是利用數(shù)組的方法,在數(shù)組尾部推出數(shù)據(jù)。聚合最后,將所有功能聚合后,如下所示,一個(gè)堆棧的數(shù)據(jù)結(jié)構(gòu)就搞定了。堆棧的經(jīng)典算法應(yīng)用,首推就是漢諾塔。 棧(stack)又名堆棧,它是一種運(yùn)算受限的線(xiàn)性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱(chēng)為棧頂,相對(duì)地,把另一端稱(chēng)為棧底。 一、實(shí)現(xiàn)一個(gè)棧類(lèi)Stack 基于堆...

    Hydrogen 評(píng)論0 收藏0
  • 漢諾問(wèn)題

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

    RayKr 評(píng)論0 收藏0
  • 【程序員必會(huì)十大算法】之分治算法漢諾問(wèn)題)

    摘要:應(yīng)用分治法是一種很重要的算法。字面上的解釋是分而治之,就是把一個(gè)復(fù)雜的問(wèn)題分成兩個(gè)或更多的相同或相似的子問(wèn)題,再把子問(wèn)題分成更小的子問(wèn)題直到最后子問(wèn)題可以簡(jiǎn)單的直接求解,原問(wèn)題的解即子問(wèn)題的解的合并。 ...

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

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

0條評(píng)論

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