PHP实现杨辉三角打印的两种方法
本文将详细介绍如何使用PHP语言生成杨辉三角。涵盖直接输出固定行数的基础示例,以及结合HTML表单接收用户输入并动态渲染表格的高级实现方法,帮助开发者理解循环逻辑与数组在图形输出中的应用。
结果或目标
杨辉三角(Pascal's Triangle)是一个由数字排列成的三角形数表。其基本性质是:每行端点数为1,其余每个数等于它两肩之和。例如第n行的第m个数等于第n-1行的第m-1个数与第m个数之和。C(n, m) = C(n-1, m-1) + C(n-1, m)。在编程中,通常将其转化为二维数组进行存储和计算。
准备条件
- 已安装支持PHP解析的运行环境(如Apache+Nginx+MySQL/PhpStudy等)。
- 熟悉PHP基础的for循环语法及二维数组操作。
- 了解HTML表单提交机制,以便处理动态输入场景。
真实操作顺序
第一种方法:直接输出指定行数的简单实现
目的:快速演示如何通过纯PHP代码生成一个简单的字符或符号组成的三角形结构,不涉及复杂的数值计算。
入口:新建一个名为 pascal_simple.php 的文件。
动作:使用两层循环控制输出的行列关系。外层控制行数递减,内层控制每行的缩进或占位符输出。以下代码展示了如何打印一个由字母 a 构成的三角形轮廓(仅作格式演示):
<?php
// 杨辉三角格式演示
for ($i=6; $i >= 0; $i--) {
for ($j=$i; $j <= 6; $j++) {
if ($j <= 5) {
echo "<b>a</b>";
} else {
echo "<br />";
}
}
}
?>
重要参数: $i 从6递减到0,控制总行数;$j 用于控制每行的空格或符号数量。
完成状态:浏览器页面将显示一个由加粗字母 a 组成的左对齐或右对齐的梯形结构,注意此方法未计算实际杨辉三角数值,仅展示布局逻辑。
第二种方法:基于HTML表单的动态生成与表格渲染
目的:允许用户自定义杨辉三角的行数,并通过HTML表格形式美观地展示计算后的数值结果。
入口:新建文件 pascal_dynamic.php。
动作:
- 构建前端输入界面:使用HTML form标签创建表单,包含文本框
<input name="givenlines" type="text"/>用于输入行数,以及提交按钮<input name="submit" value="打印杨辉三角形" type="submit"/>。 - 后端处理逻辑:定义函数
yanghai($line)。首先初始化二维数组$yh,然后使用双循环填充数据:- 首列和尾列元素设为1:
$yh[$i][1]=1;和当$i==$j时$yh[$i][$j]=1;。 - 中间元素遵循公式:
$yh[$i][$j]=$yh[$i-1][$j-1]+$yh[$i-1][$j];。
- 首列和尾列元素设为1:
- 渲染输出:遍历数组,将每个元素包裹在
<td>和样式标签中输出,形成<table>表格结构。 - 触发调用:检查
$_POST['submit']是否被设置,若存在则提取用户输入的行数并调用函数。
<form method="post" action="<?php echo($PHP_SELF); ?>">
输入杨辉三角的阶数:<input type="text" name="givenlines" size="5">
<input type="submit" name="submit" value="打印杨辉三角形">
</form>
<?php
function yanghui($line) {
echo "<table border='1' cellspacing='0' cellpadding='5' align='center'>"; // 增加基础边框美化
for($i=1;$i<=$line;$i++) {
echo "<tr>";
// 为了居中对齐,通常建议左侧也补空格或调整CSS,此处保持原逻辑
for($j=1;$j<=$i;$j++) {
$yh[$i][1]=1;
if ($i==$j) $yh[$i][$j]=1;
else $yh[$i][$j]=$yh[$i-1][$j-1]+$yh[$i-1][$j];
echo "<td width='40' style='text-align:center;'>";
echo "<font color='#0000FF'>{$yh[$i][$j]}</font>";
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
}
if($_POST['submit']) {
// 增加基本的输入验证
$lines = intval($_POST['givenlines']);
if ($lines > 0 && $lines <= 20) { // 限制最大行数以防溢出
yanghui($lines);
} else {
echo "<p>请输入有效的行数(1-20之间)</p>";
}
}
?>
重要参数: $line 为用户输入的行数;$yh[$i][$j] 为存储计算结果的二维数组索引。
风险提醒:原文代码未对输入值进行类型转换和范围限制,容易导致非整数输入报错或内存溢出。建议在正式环境中增加 intval() 转换及最大值校验。
完成状态:用户在页面输入数字(如5)并点击按钮后,下方将呈现一个包含5行、数字逐行递增的蓝色字体杨辉三角表格。
完成判断
- 运行脚本无Parse Error语法错误。
- 静态测试能正确输出预设的三角形形状。
- 动态测试中输入不同行数,生成的表格行数与内容符合杨辉三角数学规律(即每行两端为1,中间数为上一行相邻两数之和)。
简要总结
通过上述两种PHP实现方式,可以看到从简单的循环排版到结合Web交互的数据处理过程。杨辉三角的核心在于利用二维数组保存前一行的计算状态以推导下一行。在实际开发中,建议采用第二种动态加载的思路,但需补充输入验证、CSS样式美化以及可能的性能优化(如缓存计算结果)。
以上就是PHP写杨辉三角实例代码的详细内容,更多关于PHP杨辉三角算法的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









