问题:有m个猴子,从任一个开始数,数到第 n 个把这第 n 个捉出,然后再从下一个开始数,数到第 n个捉出 最后一个猴子是? function getLastOne($m, $n, $arr = array()) { if($n == 0 || $m < 1) { return false; } if($n > $m) { $key = ($n - 1) % $m; } else { $key = $n - 1; } if(empty($arr)) { $arr = range(1, $m); } else { $arr = array_values($arr); } $m = count($arr); if($m == 1) { $lastone = $arr[0]; } else { //提出第n个猴 unset($arr[$key]); //从下一个数起 $newarr = array(); foreach ($arr as $k => $v) { if($k < $key) { $newarr[] = $v; unset($arr[$k]); } else { break; } } $arr = array_merge($arr, $newarr); $m--; $lastone = getLastOne($m, $n, $arr); } return $lastone; } 输出结果:echo getLastOne(11, 9);