Regarding the recursion, here's the application of it:
Define a simple representation of a cell position, like "row,col"
(text JOIN(row,",",col))
Create a function Neighbors(cellID) that returns a list of the
direct neighbor cellIDs around input cellID. (0-8)
Create a function IsABomb(cellID) that returns true if there
is a bomb at cellID.
Create a function NeighboringBombs(cellID) that returns the count
(0-8) of bombs in Neighbors(cellID).
Create function Union(list1, list2) that returns the set union of
list1 and list2 (avoiding duplication.)
Create a function Frontier(cellList) that returns a list of cellIDs
that are neighbors of cells in cellList and have 0 neighboringBombs
and are not in the list cellList. Make Frontier contents cells visible.
If Frontier is empty, return cellList,
else return Frontier(Union(cellList, Frontier(cellList))).
That's your recursion.
ABG