php实现报数
PHP 实现报数
报数问题通常涉及按照特定规则生成数字序列。以下是一个常见的报数问题的 PHP 实现方法,例如“数数并说”问题(Count and Say)。
实现步骤
定义一个函数 countAndSay,接受一个整数参数 n,返回第 n 项的报数序列。

function countAndSay($n) {
if ($n == 1) {
return "1";
}
$prev = countAndSay($n - 1);
$result = "";
$count = 1;
for ($i = 0; $i < strlen($prev); $i++) {
if ($i + 1 < strlen($prev) && $prev[$i] == $prev[$i + 1]) {
$count++;
} else {
$result .= $count . $prev[$i];
$count = 1;
}
}
return $result;
}
使用示例
调用 countAndSay 函数生成前几项的报数序列:

for ($i = 1; $i <= 5; $i++) {
echo "n = $i: " . countAndSay($i) . "\n";
}
输出结果:
n = 1: 1
n = 2: 11
n = 3: 21
n = 4: 1211
n = 5: 111221
逻辑说明
- 递归生成前一项的报数序列。
- 遍历前一项的字符串,统计连续相同字符的数量。
- 将统计结果(数量 + 字符)拼接到当前项的报数序列中。
性能优化
对于较大的 n,递归可能导致性能问题。可以改为迭代实现:
function countAndSay($n) {
$result = "1";
for ($i = 1; $i < $n; $i++) {
$temp = "";
$count = 1;
for ($j = 0; $j < strlen($result); $j++) {
if ($j + 1 < strlen($result) && $result[$j] == $result[$j + 1]) {
$count++;
} else {
$temp .= $count . $result[$j];
$count = 1;
}
}
$result = $temp;
}
return $result;
}
这种方法避免了递归调用,适合处理较大的 n 值。






