999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用游戲體驗遞歸

2017-05-18 16:21:37陳凱
中國信息技術教育 2017年9期
關鍵詞:背景游戲

陳凱

在用計算機解決問題時,常會用到“遞歸”的方法。簡單來說,遞歸就是程序在執行中,某段函數或過程調用到自己。然而,遞歸的方法,似乎和人類日常思考問題的方法不太一致,雖然遞歸可以使代碼變得優雅簡潔,但初學者,卻容易被遞歸弄得云里霧里,就算勉強看得懂別人的代碼,當自己運用時,仍然感覺不得要領。

本期,筆者借助兩款游戲,用直觀和互動的形式來展現遞歸的魅力。

Lightbot

第一款游戲叫Lightbot,官網地址是www.lightbot.com,這款游戲是為10歲左右的小朋友準備的,它既可下載到移動設備運行,也可直接在線運行。游戲任務是用盡可能簡單的命令標志(其實只需要拖拽命令圖標,根本不需要敲打鍵盤輸入代碼),來控制一個小機器人點亮藍色地磚上的燈。

游戲關卡難度設置頗為平坦,如為了理解什么是遞歸,先要理解什么是過程。

由圖1可以看出,機器人可以使用的命令有“前進”“點燈”“左轉”“右轉”“跳躍”“調用過程1(P1)”這六個,游戲本身并沒有花費很多文字告訴人們為什么要使用“過程”,然而,因為主程序(MAIN)只提供了12個空格,所以就只能將可以重復做的步驟都填進過程1(PROC1)中,具體解答見圖2。隨著游戲的繼續,可供填充的空格會越來越少,難度也就越來越高。當充分練習了“過程”之后,游戲進入到“遞歸”的環節。

從圖3中可以看出,主程序(MAIN)只有一個空格,這顯然是有意為之的,因為這就是強迫玩家只能在主程序中調用其他過程,而被調用的過程“PROC1”中所提供的空格也并不多,所以就只能在被調用過程的最后,再調用自己,于是就形成了遞歸。

如圖4所示,主程序的1個空格和被調用過程的8個空格全部被填滿,因此,過程的最后一個格子必須是調用過程自己,所以要填入“P1”,這樣就能點亮所有的燈了。

大家也許會發現,在這個例子中,過程“PROC1”會不斷調用自己,若放到現實世界中,那個機器人一定會因為內存被全部占滿而崩潰。因此,在Lightbot的后續關卡中,加入了按顏色進行判斷以便退出遞歸的圖標。

類似的無退出出口的遞歸的情況,可見如下Python程序代碼:

def proc1():

content=raw_input("Input:") #input string

print content #output string

print content #output string again

proc1()

proc1()

以上程序的作用是將用戶輸入的字符串輸出兩次,因為在過程最后又調用了過程自己,除非強行退出,否則遞歸會一直繼續下去。

Lightbot在后續關卡中加入了諸如跳板、傳送機等元素,雖然機器人跑來跳去很有趣,但可能也無法清晰展現出遞歸強大的計算作用。

Robozzle

還有一款游戲能夠將遞歸的計算能力充分展現出來,名叫Robozzle。Robozzle游戲的地址是www.robozzle.com,點擊“limited version”按鈕,就算不注冊用戶,也能愉快地挑戰大量設計好的謎語,如果注冊了用戶就能設計自己特有的謎語供他人挑戰。游戲任務是消滅棋盤上的星星,其實就是拖動命令圖標和顏色到空格中,指揮一個“小飛機”走過所有標注了星星的格子。若按照“easy to hard”的順序玩,“消滅星星”一開始很容易。圖5所示的是某個用到條件判斷的訓練項目。

在圖5中,除了右上角的星星的背景是藍色的,其他星星的背景都是紅色的,工具欄提供的圖標有“前進”“左轉”“右轉”“調用過程1(F1)”以及各種顏色的色塊。灰色塊的作用是:灰色背景上的命令無論如何都要執行,而紅色、藍色以及其他顏色色塊的作用是只有當前“飛機”所處的背景顏色和當前命令的背景顏色一致,才能執行該命令,否則就跳到下一個命令。可以看出,Robozzle是用色塊來進行單分支的條件判斷。以上謎語的解答比較簡單,只要三個命令就可以完成任務(此謎語也只提供了三個空格),分別是一個灰色背景的前進、一個藍色背景的右轉、一個灰色背景的F1(調用自身)(如圖6)。其意義是當走到藍色背景的格子時右轉,其他時候前進,并且在過程最后調用自身。

由圖6可以看出,上面的例子也是一個沒有出口的遞歸。不過若對調用遞歸命令也作條件判斷,就可以實現一些乍看起來不可能實現的任務。圖7是第330號謎語,該謎語比先前增加了不少難度(但在大量謎語中還算是容易的)。

此謎語最困擾人的是,右上角處的最后一個拐彎,因為此處并沒有特別出現不一致的顏色,因此“飛機”也就不可能在最后的拐彎處根據條件判斷來獲得拐彎指令,那么“飛機”究竟是如何拐彎的?奧妙在于左上角紅色背景的那個空格。若借助這個紅色背景的格子放置一個退出遞歸的標志,那么一切就迎刃而解了。

圖8是具體的解決方法,在“F1”過程中分別放置灰色背景的“F2”“右轉”“前進”圖標,在“F2”過程中分別放置灰色的“前進”、藍色的“F2”、紅色的“右轉”和灰色的“前進”圖標。為什么要這樣做,藍色背景的“F2”圖標表示只有當背景色為藍色時才調用自身,當“飛機”走到紅色的格子時,此分支結構的條件判斷不再成立,于是就會執行接下來的紅色“右轉”和灰色“前進”圖標。容易理解的是,紅色“右轉”只執行了一次,所以“飛機”頭轉向右。那么,為什么在第一次轉彎后灰色的“前進”還會被執行許多次呢?其實,剩下的命令都是先前被遞歸打斷而沒有來得及執行的命令。當“F2”過程從所有的遞歸中逐層退出后,最終會回到“F1”過程,執行剩下的灰色“右轉”和灰色“前進”兩個命令。

下面的Python程序,很清晰地展現了與剛才游戲類似的遞歸調用過程:

def proc1():

content=raw_input("Input:") #input string

print content #output string

if (content!="0"):

proc1()

print content #output string again

proc1()

該程序運行時,當用戶輸入“a”,程序只輸出了一個“a”,然后就開始調用自身,剩下的那個輸出“a”的動作被存進堆棧中去了,接著用戶可以輸入“b”,程序也只輸出一個“b”,剩下的那個輸出“b”的動作也被存進堆棧中,當用戶輸入“0”時,因條件不滿足,程序不再調用自身,在退出遞歸的過程中,執行了先前被積壓的動作,于是會倒過來輸出“0”“b”“a”。

如果到現在還沒弄明白,不妨對照以上程序代碼,親手玩一玩“消滅星星”的游戲,當謎語解開后,就差不多會使用遞歸來寫程序了。隨著水平的提升,游戲的另一種潛力被逐漸揭示出來,原來人們除了可以用“飛機”來消滅星星,還可以用它來實現各種計算任務,如二進制四則運算、斐波那契數列、分形圖案的繪制等,有興趣的朋友可以挑戰一下。

猜你喜歡
背景游戲
“新四化”背景下汽車NVH的發展趨勢
《論持久戰》的寫作背景
當代陜西(2020年14期)2021-01-08 09:30:42
黑洞背景知識
游戲
晚清外語翻譯人才培養的背景
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
背景鏈接
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
主站蜘蛛池模板: 亚洲国内精品自在自线官| 98精品全国免费观看视频| 五月丁香在线视频| 久久久久中文字幕精品视频| 天天视频在线91频| 四虎免费视频网站| 中文字幕无码中文字幕有码在线| 免费女人18毛片a级毛片视频| 国产理论一区| 久久综合结合久久狠狠狠97色| 国产精品区视频中文字幕| 99精品在线看| 三级欧美在线| 日韩在线永久免费播放| 99精品在线看| 天天综合网亚洲网站| 黄色网页在线观看| 日韩精品一区二区三区视频免费看| 久久人人97超碰人人澡爱香蕉| 日韩毛片免费观看| 最新国产高清在线| 无码日韩精品91超碰| 中字无码av在线电影| 国产91丝袜在线播放动漫| 丰满人妻中出白浆| 日韩欧美国产中文| 999国产精品永久免费视频精品久久| 精品视频一区二区三区在线播| 老司机午夜精品网站在线观看| 伊人无码视屏| 精品少妇人妻无码久久| 久久精品亚洲中文字幕乱码| 久久国产V一级毛多内射| 成人在线综合| 亚洲AV无码不卡无码| 婷婷色狠狠干| 亚洲国产天堂久久综合226114| 高清国产在线| 久久精品国产精品一区二区| 久久综合色天堂av| 日本国产精品一区久久久| 久久久精品无码一区二区三区| 国产sm重味一区二区三区| 高清不卡毛片| 国产一区二区影院| 91精品国产一区自在线拍| 日韩欧美国产综合| 成人免费午夜视频| 国产一级视频久久| 精品伊人久久久大香线蕉欧美| 久久狠狠色噜噜狠狠狠狠97视色| 99精品国产高清一区二区| 日韩AV无码免费一二三区| 亚洲一区二区精品无码久久久| 99爱视频精品免视看| 91无码视频在线观看| 亚洲国产精品无码AV| 99热这里只有精品免费| 欧美a在线视频| 一区二区三区在线不卡免费| 国产午夜不卡| 欧美精品H在线播放| 在线观看无码av免费不卡网站 | 无码一区中文字幕| 国产手机在线ΑⅤ片无码观看| 亚洲一区二区三区中文字幕5566| aa级毛片毛片免费观看久| 国产理论一区| 国产成人精品一区二区三在线观看| 国产精品视频导航| 97视频免费在线观看| 一边摸一边做爽的视频17国产| 亚洲综合精品香蕉久久网| 欧美激情视频在线观看一区| 亚洲一本大道在线| 天天做天天爱天天爽综合区| 国产伦片中文免费观看| 免费一级毛片在线观看| 这里只有精品在线| 丁香五月激情图片| 国产精品第5页| 国产美女精品一区二区|