杨辉三角原理及PHP代码实现

张开发
2026/4/4 17:12:42 15 分钟阅读
杨辉三角原理及PHP代码实现
杨辉三角又称帕斯卡三角是我国南宋数学家杨辉在1261年所著的《详解九章算法》中首次记录的一种三角形数表在欧洲则称为帕斯卡三角Blaise Pascal1653年研究。它是一个无限对称的数字金字塔效果图研究规则设定杨辉三角构造规则杨辉三角是一个由数字排列成的三角形数表其构造规则非常简单顶端数字第 0 行只有一个数字 1。边界数字从第1行开始每一行的最左边和最右边的数字都是 1。中间数字除了边界外中间的每一个数字都等于它正上方和左上方两个数字之和。用数学公式表示规则设定行 n 从 0 开始计数列 k 也从 0 开始计数。如果设 C(n,k) 为第 n 行第 k 列的数字(行和列都从 0 开始计数且 n ≥)则C(n,k) C(n-1, k-1) C(n-1, k)另外每行首尾的数为C(n,0) 1且 C(n,n)1。通过分析我得出的的几个关键特点n代表第n行n从0开始计数k代表第k列k从0开始计数。第 0 行有1个数1。第 1 行有2个数1、1。第 2 行有3个数1、2、1。第 n 行有n1个数第n1个数的索引值是n第n个数的索引值是n-1。n 必须满足的条件是n ≥ 2。因为只当行数n ≥ 2时才存在中间元素。k 必须满足的条件是k ≥ 1 k ≤ n-1也就是说让k定位到每一行不是首尾的数。代码逻辑解析初始化我们创建一个空数组 $triangle 来存储整个三角形。外层循环遍历每一行从 0 到 $numRows - 1。行初始化对于第 $i 行我们创建一个长度为 $i 1 的数组并全部填充为 1。这一步巧妙地利用了杨辉三角“两端为 1”的特性省去了单独判断首尾的代码。内层循环从第 2 行索引为 2开始遍历该行中间的元素索引从 1 到 $i - 1。状态转移利用公式 $row[$j] $triangle[$i - 1][$j - 1] $triangle[$i - 1][$j] 计算当前值。这里 $triangle[$i - 1] 代表上一行。存储将构建好的行添加到 $triangle 数组中。用 PHP 实现的杨辉三角算法?php declare (strict_types 1); /** * 生成杨辉三角 * 采用“先填充默认值 1再计算中间值”的策略。 * param int $numRows 需要生成的行数。 * return array 返回一个二维数组。 */ function generateYangHuiTriangle(int $numRows): array { // 防御性编程处理非正数输入 if ($numRows 0) { return []; } $triangle []; for ($i 0; $i $numRows; $i) { // 首先把每一行的值全部初始化为 1。 $row array_fill(0, $i 1, 1); // 计算中间值。只有当 i ≥ 2 时才存在中间元素索引 j ≥ 1 j ≤ i-1。 for ($j 1; $j $i; $j) { $row[$j] $triangle[$i - 1][$j - 1] $triangle[$i - 1][$j]; } $triangle[] $row; } return $triangle; } // print_r(generateYangHuiTriangle(5)); $rows 5; // 格式化输出杨辉三角 echo h3杨辉三角{$rows}行/h3; $triangle generateYangHuiTriangle($rows); foreach ($triangle as $line) { echo str_repeat(nbsp;nbsp;nbsp;nbsp;nbsp;, $rows - count($line)); echo implode(nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;, $line) . br; }以上算法在浏览器中的输出结果

更多文章