题目
棋盘大小为8行9列,从棋盘 (0,0) 位置出发,到达 (x,y) 位置,要求必须得走k步,求一共多少种走法,规定每次只能走日字的对角
- 提供一种从后往前的递归方法,从(x,y)位置还原能走到该位置的点,然后一步一步往前推,直到 k 步走完,且最终落点在(0,0)位置的符合一种解法
function process(x, y, step) {
// 从0开始计数,棋盘大小是9行10列
if (x < 0 || x > 8 || y < 0 || y > 9) {
return 0;
}
if (step === 0 && x === 0 && y === 0) {
return 1;
}
// 往前推八个方向的落点
return (
process(x - 1, y + 2, step - 1) +
process(x + 1, y + 2, step - 1) +
process(x + 2, y + 1, step - 1) +
process(x + 2, y - 1, step - 1) +
process(x + 1, y - 2, step - 1) +
process(x - 1, y - 2, step - 1) +
process(x - 2, y - 1, step - 1) +
process(x - 2, y + 1, step - 1)
);
}