[問題] 請問關於遞迴的問題(求講解)(補圖)

作者: timeregorge (Nick)   2014-04-22 20:57:48
http://imgur.com/JrrL7NU
小弟練習一個例題
這個例題的目的是計算陸地的尺寸
但不重複計算
我左看右看完全不知道他到底是如何計算的
或是為什麼在if那邊要用[y] [x] != 'land'
等等的
請問有人可以完整的幫我解釋一下嗎?
謝謝您!
作者: mars90226 (火星人)   2014-04-22 22:06:00
這解法中心思想就是從某個點開始,往外8個點檢查是否為陸地,加起來。因為周圍8個點的周圍也可能是陸地,所以用遞迴的方式計算計算過的陸地要改掉,避免重複計算
作者: timeregorge (Nick)   2014-04-23 23:54:00
謝謝您的解說,請問由一個點開始計算,這個起始點是任意點嗎?或是左上角呢?另外若自己計算陸地有27個為什麼執行出來的結果是23呢?
作者: mars90226 (火星人)   2014-04-24 00:26:00
這method是印出傳入的5, 5那個點的陸地大小,不是全部中間那個陸地只有23個點沒錯感覺你似乎沒有程式背景,一般程式語言中陣列的計算是從0開始喔,所以(5,5)的話你要數第(6,6)個位置才是然後就像你的圖一樣,找周圍8個點繼續計算就是了綠框的位置剛好連接紅框那邊的陸地和綠框上面那個陸地你把綠框改成水以後,兩邊就不相連了,所以計算不到你試試continent_size(world, 8, 2)world[1][2]會去找從world第二排第三個所以你的右上角應該是world[2][8]但是continent_size中是用world[y][x],所以要反過來上面說得不清楚,world[1][2]是找world第二橫排第三個基本上,你可以把第一個[]裡面的數字當作row第二個[]裡面的數字當作column這裡的M宣告在def外面,不能用在def裡面詳細的原因挺難解釋的,會牽扯到class的context的問題Sorry,我忘記這是大寫M...,大寫的M是constant,可以用在def裡面沒錯
作者: hSATAC (cAt Ash)   2014-04-29 02:20:00
不要管那個大小寫了...他只是想畫一個地圖而已...
作者: rexkimta (冷杉林)   2014-05-01 20:18:00
為什麼這裡用'land'應該只有原作者知道,你要用M也可以但可能是因為這樣比較容易看得懂。
作者: timeregorge (Nick)   2014-05-02 23:37:00
原來如此,本來的想法應該是因為def 外部的變數和內部是不可共用的,但我改成M卻也是可以執行..

Links booklink

Contact Us: admin [ a t ] ucptt.com