因此,我正在编写此应用程序,用户可以在其中将物体(卡片)放在墙上。如果墙上的位置已被卡片占用,则需要移动该卡片。但是,如果还下一个位置,我们也必须移动该卡,依此类推。
因此,我认为递归函数将是解决此问题的最佳方法,对吗? 我的(伪)代码是这样的:
{{1}}
但是,只有连续的最后一张卡被移动!老实说,我并不是编写递归函数的最佳人选。知道我的问题是什么吗?
答案 0 :(得分:0)
在右侧移动卡后,必须移动当前卡。
private void moveCard(int row, int column){ //row, column = position on the wall
if(column >= length of wall)
return;
if(position at row, column is empty)
move card to the right;
else {
moveCard(row, column+1);
if (position at row, column is empty)
move card to the right;
}
请注意,如果由于右侧的所有空格已满而导致递归调用无法移动卡,则必须再次检查该位置是否为空。
您还可以让该函数返回一个布尔值,该布尔值指示是否成功移动了卡,并且可以检查而不是测试空间是否为空。