-2

以下は、本で見たコードで、次のように出力されます"23"

M = 'land'
o = 'water'
world = [[o,o,o,o,o,o,o,o,o,o,o],
     [o,o,o,o,M,M,o,o,o,o,o],
     [o,o,o,o,o,o,o,o,M,M,o],
     [o,o,o,M,o,o,o,o,o,M,o],
     [o,o,o,M,o,M,M,o,o,o,o],
     [o,o,o,o,M,M,M,M,o,o,o],
     [o,o,o,M,M,M,M,M,M,M,o],
     [o,o,o,M,M,o,M,M,M,o,o],
     [o,o,o,o,o,o,M,M,o,o,o],
     [o,M,o,o,o,M,o,o,o,o,o],
     [o,o,o,o,o,o,o,o,o,o,o]]

def continent_size world,x,y
  if world[y][x] != 'land'
    size =0
  else
    size = 1
  end

  world[y][x] = 'counted land'

  size = size + continent_size(world,x-1,y-1)
  size = size + continent_size(world, x , y-1)
  size = size + continent_size(world, x+1, y-1)
  size = size + continent_size(world, x-1, y )
  size = size + continent_size(world, x+1, y )
  size = size + continent_size(world, x-1, y+1)
  size = size + continent_size(world, x , y+1)
  size = size + continent_size(world, x+1, y+1)
  size

end
puts continent_size(world, 5, 5)

return前に削除すると、このコードが機能しない理由が気になりsize=0ます。

4

2 に答える 2

1

再帰呼び出しです。配列の要素を計算すると、関数は8つの要素が近くにある状態で自分自身を呼び出し、要素が「土地」でなければ計算を終了します。

「return」行を削除すると、stackoverflow または配列の範囲外になるまで永久に実行されます...

于 2013-09-02T04:50:52.700 に答える
1
于 2013-09-02T04:57:48.370 に答える