-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 个元素调用自身,如果该元素不是“land”,则完成计算。

如果删除“return”行,它将永远执行,直到stackoverflow或超出数组范围...

于 2013-09-02T04:50:52.700 回答
1
于 2013-09-02T04:57:48.370 回答