recursion(parameter 1, parameter 2, ..., int player)
与一般的 recursion 不同的是,这类 recursion tree 是交替的,即
p1
p2
p1
p2
终止条件是,无路可走。
经典题目
class Solution {
public boolean canWin(String s) {
char[] array = s.toCharArray();
// 0: player 1
// 1: player 2
return canWin(array, 0);
}
// Player 1 and Player 2 have the same right.
// If P1 made a move, and then found that P2 couldn't make a move (false), then P1 won (true).
// Same to P2.
// The only difference would be who is the first player to move.
private boolean canWin(char[] array, int player) {
for (int i = 0; i < array.length - 1; i++) {
if (array[i] == '+' && array[i + 1] == '+') {
array[i] = '-';
array[i + 1] = '-';
boolean flag = canWin(array, 1 - player);
array[i] = '+';
array[i + 1] = '+';
if (!flag) return true;
}
}
return false;
}
}