如何在这里使用Javascript应用递归函数?

如何在这里使用Javascript应用递归函数?,javascript,Javascript,我想用递归填充中间区域。最好的方法是什么?我想要一个递归的解决方案,而不是其他的。如何检查左右顶部和底部 'use strict' let bitmap = [ '.....******.....', //.....******..... '....*......*....', //....*++++++*.... '...*........*...', //...*++++++++*.... '....*......*....', //....*++++++*....

我想用递归填充中间区域。最好的方法是什么?我想要一个递归的解决方案,而不是其他的。如何检查左右顶部和底部

'use strict'   
let bitmap = [
  '.....******.....', //.....******.....
  '....*......*....', //....*++++++*....
  '...*........*...', //...*++++++++*....
  '....*......*....', //....*++++++*....
  '.....******.....', //.....******.....
];

bitmap = bitmap.map((row) => [...row]);

const showOnPosition = (x, y) => bitmap[y][x];
//console.log(showOnPosition(4, 1));
const changeSymbol = (x, y) => (bitmap[y][x] = '+');
//console.log(changeSymbol(6, 1));

const fill = (x, y) => {
  // painted?
  if (showOnPosition(x, y) === '*') {
    return bitmap.map((row) => row.join('')).join('\n');
  } else {
    // paint!
    changeSymbol(x, y);

    return bitmap.map((row) => row.join('')).join('\n');
  }
};

console.log(fill(6, 1));
我想检查周围的元素,如果它们不是一个。它们应替换为a+。类似于洪水填充或此处仅通过递归。 它应该是这样的:

.....******.....
....*++++++*....
...*++++++++*....
....*++++++*....
.....******.....

要递归地填充,您必须迭代一个单元格差异数组,即

[[0, 1], [0, -1], [1, 0], [-1, 0]]
从这些坐标中,确定新的X和Y,如果以前没有填充过该坐标,则再次调用fill。创建一个包含填充坐标的集并将其传递

由于[6]在外部数组中不存在,因此听起来您还需要在参数中切换X和Y坐标。fill6,1应参考位图[1][6]

“严格使用” 常量位图=[ '.....******.....', //.....******..... '....*......*....', //....*++++++*.... '...*........*...', //...*++++++++*.... '....*......*....', //....*++++++*.... '.....******.....', //.....******..... ] .maprow=>[…行]; 常量填充=y,x,填充=新集合=>{ 如果位图[x][y]='.'{ //油漆! 位图[x][y]='+'; //重现 [0,1]、[0,-1]、[1,0]、-1,0]、-1,0]的常数[xDiff,yDiff]{ 常数newX=x+xDiff; 常数newY=y+yDiff; const key=`${newX}{newY}`; if!filled.haskey&&bitmap[newX]{ 填充的addkey; fillnewY,newX,filled; } } } 返回bitmap.maprow=>row.join.join'\n'; };
console.logfill6,1;我们肯定需要对这个问题做更多的解释……谢谢,我已经用不同的方式解决了。但是提示[[0,1],[0,-1],[1,0],-1,0]]非常好,对我帮助很大。