如何在这里使用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]]非常好,对我帮助很大。