漢諾塔(Tower of Hanoi)源于印度傳說(shuō)中,大梵天創(chuàng)造世界時(shí)造了三根金剛石柱子,其中一根柱子自底向上疊著64片黃金圓盤(pán)。大梵天命令婆羅門(mén)把圓盤(pán)從下面開(kāi)始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤(pán)上不能放大圓盤(pán),在三根柱子之間一次只能移動(dòng)一個(gè)圓盤(pán)。
在進(jìn)行轉(zhuǎn)移操作時(shí),都必須確保大盤(pán)在小盤(pán)下面,且每次只能移動(dòng)一個(gè)圓盤(pán),最終c柱上所有的盤(pán)子也是從上到下按從小到大的順序擺放。
當(dāng)a柱子上只有一個(gè)盤(pán)子時(shí)只要把那個(gè)盤(pán)子直接移到c就行了,有兩個(gè)盤(pán)子的話把1號(hào)盤(pán)先移到b柱,再把2號(hào)盤(pán)移到c柱,最后把b柱上的1號(hào)盤(pán)移到c柱就行了,那么如果有n個(gè)盤(pán)子呢?
這里我們先把上方的n-1個(gè)盤(pán)子看成整體,這下就等于只有兩個(gè)盤(pán)子,自然很容易了,我們只要完成兩個(gè)盤(pán)子的轉(zhuǎn)移就行了,再把前n-2個(gè)盤(pán)子看作一個(gè)整體,就這樣一步步向前找到可以直接移動(dòng)的盤(pán)子,n-3……,2,1,最終,最上方的盤(pán)子是可以直接移動(dòng)到c柱的。
看到這里其實(shí)就已經(jīng)有了程序的設(shè)計(jì)思路,那就是遞歸,這個(gè)時(shí)候只要理解遞歸最終解決的問(wèn)題是什么就行了,中間的事交給程序,遞歸可以很繞也可以很直接,我們按照最直接的理解就行了。
如果你想弄清楚每一步執(zhí)行過(guò)程,那么你可以繼續(xù)往下看,確實(shí)有點(diǎn)亂,切記別把自己繞暈了。
舉個(gè)例子:當(dāng)n=7時(shí),前6個(gè)要想辦法成功移動(dòng)到b柱上,7號(hào)是Boss,他不管上面的6個(gè)小弟用什么辦法,我可以先等著,于是7號(hào)在等著上面6個(gè)完成移到b柱,現(xiàn)在6是臨時(shí)老大,他也想去c柱,于是他命令前5個(gè)移到b柱,他等著,5號(hào)也采取之前兩個(gè)的做法,于是這個(gè)命令一直往前傳,沒(méi)辦法,上面被壓著自己也沒(méi)法動(dòng)啊。
終于到了1號(hào),他是現(xiàn)在唯一能動(dòng)的,于是1號(hào)移動(dòng)到了b柱,好了,2號(hào)可以到c柱。不過(guò)a柱上還有3號(hào),于是讓1號(hào)移到c柱,3號(hào)可以到b柱了,之后1號(hào)和2號(hào)再想辦法到b柱,于是1、2、3號(hào)在b柱,4號(hào)也要到b柱啊,1、2、3號(hào)你們按照剛才的辦法到c柱,空出b柱給4號(hào)。后面的5號(hào)、6號(hào)都重復(fù)這樣的操作,終于前6號(hào)移動(dòng)到b柱,7號(hào)直接跑到了c柱,于是剩下在b柱的6個(gè)小弟還要再干一遍他們?cè)赼柱上干的事。
2019年12月蘋(píng)果公司首席執(zhí)行官蒂姆·庫(kù)克(Tim Cook)在新加坡訪問(wèn)時(shí)接受采訪,呼吁當(dāng)?shù)貎和瘜W(xué)習(xí)編碼,并稱(chēng)其是一種“全球語(yǔ)言”。此外,他還談到在新加坡開(kāi)設(shè)第三家門(mén)店的打算。
這是庫(kù)克自2011年接任蘋(píng)果首席執(zhí)行官以來(lái)首次訪問(wèn)新加坡,在為期兩天的新加坡之行中,推廣蘋(píng)果開(kāi)發(fā)者生態(tài)系統(tǒng)是庫(kù)克的重要議程之一,他希望孩子們上學(xué)時(shí)就能接觸到編碼。
庫(kù)克稱(chēng),如果孩子們只能在母語(yǔ)之外學(xué)習(xí)一種語(yǔ)言,那就應(yīng)該是編碼,因?yàn)椤熬幋a是一種全球語(yǔ)言”。他還稱(chēng):“即使是最常用的語(yǔ)言也有區(qū)域性限制,包括英語(yǔ)和漢語(yǔ)?!?h4>Swift Playgrounds 激發(fā)編程愛(ài)好
庫(kù)克指出,雖然編碼不會(huì)為人類(lèi)建立新的疆域,但它提供了一個(gè)創(chuàng)造性解決問(wèn)題的機(jī)會(huì),因此應(yīng)該被引入到數(shù)學(xué)、歷史或英語(yǔ)課程中。
蘋(píng)果CEO近期還專(zhuān)門(mén)在微博上向一位年僅8歲的中國(guó)朋友送上了生日祝福,這名8歲孩子是編程達(dá)人,今年8月份他在B站上上傳了第一個(gè)編程視頻,名為“小學(xué)生教你學(xué)編程”的Swift Playgrounds 通關(guān)教程,已經(jīng)獲得了20W+的播放量。他爸爸“周花卷”透露,在很小的時(shí)候,Vita就已經(jīng)展現(xiàn)出了超前的數(shù)學(xué)和邏輯思維,4歲半開(kāi)始Vita就接觸與編程有關(guān)的知識(shí)了,5歲半左右,Vita就開(kāi)始上手寫(xiě)代碼了。
今天我們來(lái)看一下2019年第十一屆藍(lán)橋杯Scratch北京賽區(qū)的試題,最后一道題難度大大提升。
1.沙漠里有四個(gè)樹(shù)坑,小樹(shù)呈虛像狀態(tài)位于四個(gè)樹(shù)坑中
2.每次按下鼠標(biāo),多個(gè)水滴從鼠標(biāo)處呈拋物線落下
3.澆水五次后,小樹(shù)從樹(shù)坑中長(zhǎng)出來(lái)
這道題看似沒(méi)什么難度,因?yàn)樾?shù)沒(méi)有成長(zhǎng)過(guò)程,澆水直到虛像結(jié)束。但是題目明確要求水要呈拋物線落下,對(duì)于小朋友們難度很高。但是可以參考之前的競(jìng)賽習(xí)題:小象噴水。
1.隱藏,置頂最上層。創(chuàng)建澆水次數(shù)變量
2.重復(fù)執(zhí)行澆水,直到澆水次數(shù)為5
3.如果鼠標(biāo)被按下,就開(kāi)始執(zhí)行澆水操作
4.澆水,實(shí)際上就是讓水滴克隆體進(jìn)行拋物線運(yùn)動(dòng)。下面會(huì)放出參考程序,給x,y坐標(biāo)一個(gè)變化值,同時(shí)y方向上的變化值也在不停地改變
1.開(kāi)始,虛像特效100
2.接收到小樹(shù)長(zhǎng)大,虛像變?yōu)?
這道題是一道比較綜合的題目,難點(diǎn)主要在于拋物線程序。小朋友們沒(méi)有接觸過(guò)的物理知識(shí),就很難以制作甚至理解。簡(jiǎn)單來(lái)說(shuō),x在改變的同時(shí),y坐標(biāo)減少,y坐標(biāo)減少的速度越來(lái)越快。