题目
两头牛牛先吃和后吃,每次吃只能吃4的幂的份数,比如0,4,16...,最后一个吃完的牛牛赢,给定草的份数返回先手赢还是后手赢
- 先写出base case ,当草的份数为0-4时可以逻辑相出答案,之后的数量时,循环先手的情况,吃0,4,16...只要不大于草的份数,然后将剩下的草递归交给后手
- 主要当先手先吃时,子过程的先手其实是母过程的后手,子过程的后手是母过程的先手
function process(num) {
if (num < 5) {
retutn(n === 0 || n === 2) ? "后手" : "先手";
}
let base = 1;
while (base <= num) {
if (process(n - base) === "后手") {
return "先手";
}
// 防止溢出,比如 num 在 即将溢出的边缘,base*4 就会溢出
if (base > num / 4) {
break;
}
base = base * 4; // 遍历先手的所有情况
}
return "后手"; // 没有返回先手那么就返回后手
}