为什么'put continent_size(world,9,1)'返回'0'

时间:2014-02-03 23:54:44

标签: arrays recursion

我是编程新手所以我正在阅读Chris Pine的“学习编程,第2版”并参加下面的程序。在他的书中,世界[8] [2] = o,然而,我把它改为M以进一步测试他的程序。

当我进行此更改时,continent_size方法为 continent_size(world,9,1)返回0,我对此感到困惑。有人可以帮忙吗?这不应该回归25 ??

o = 'water'
M = 'land'

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,M,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[x][y] != 'land'
    return 0
    end

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

  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)
puts continent_size(world, 9, 1)

---------------------

25
0  

1 个答案:

答案 0 :(得分:2)

continent_size(world, 9, 1)执行之前,对continent_size(world, 5, 5)的调用会更改数组world的内容。这称为。在continent_size(world, 5, 5)返回后,您的数组world将被修改如下:

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,C,o,o,o,o,o,M,o],
         [o,o,o,C,o,C,C,o,o,o,o],
         [o,o,o,o,C,C,C,C,o,o,o],
         [o,o,o,C,C,C,C,C,C,C,o],
         [o,o,o,C,C,o,C,C,C,o,o],
         [o,o,C,o,o,o,C,C,o,o,o],
         [o,C,o,o,o,C,o,o,o,o,o],
         [o,o,o,o,o,o,o,o,o,o,o]]

C = 'counted land'。修改数组continent_size(world, 9, 1)后调用world(如上所示)返回0.因此输出25 0。