我是编程新手所以我正在阅读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
答案 0 :(得分:2)
在continent_size(world, 9, 1)
执行之前,对continent_size(world, 5, 5)
的调用会更改数组world
的内容。这称为side-effects。在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。