首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 輸出金字塔圖案的兩種實現方法(遞歸函數與雙重循環)

     編輯:PHP 相關知識

PHP 輸出金字塔圖案的兩種實現方法(遞歸函數與雙重循環)

金字塔打印是經典編程練習,考察循環控制、字符串拼接、邏輯思維。本文提供兩種實現:通用遞歸函數(支持正序/倒序、行數驗證)和簡潔雙重循環(正序/倒序),均輸出 HTML 友好格式。

方法一:通用遞歸函數 (推薦復用)

<?php
/**
 * 輸出金字塔
 * @param int $rows 行數 (1-20)
 * @param bool $ascending true=正序(尖朝上), false=倒序(尖朝下)
 * @return string HTML 字符串
 */
function pyramid($rows = 9, $ascending = true) {
    // 參數驗證
    if ($rows < 1 || $rows > 20) return '行數必須在 1-20 之間';
    if ($rows != (int)$rows) return '行數必須為整數';
    
    $str = '';
    $range = $ascending ? range(1, $rows) : range($rows, 1);
    
    foreach ($range as $i) {
        $str .= '<br/>';
        // 左側空格 (居中對齊)
        $spaces = $rows - $i;
        $str .= str_repeat(' ', $spaces * 2); // *2 近似字符寬度
        // 星號
        $stars = 2 * $i - 1; // 1,3,5,7...
        $str .= str_repeat('* ', $stars);
    }
    return $str;
}

// 使用示例
echo pyramid(9, true);   // 正序金字塔
echo '<hr>';
echo pyramid(9, false);  // 倒序金字塔
?>

方法二:簡潔雙重循環 (教學演示)

正序金字塔

<?php
$rows = 10;
for ($i = 1; $i <= $rows; $i++) {
    // 空格
    for ($s = $rows; $s >= $i; $s--) echo '  ';
    // 星號
    for ($k = 1; $k <= 2*$i-1; $k++) echo '* ';
    echo '<br/>';
}
?>

倒序金字塔

<?php
$rows = 10;
for ($i = $rows; $i >= 1; $i--) {
    for ($s = $rows; $s >= $i; $s--) echo '  ';
    for ($k = 1; $k <= 2*$i-1; $k++) echo '* ';
    echo '<br/>';
}
?>

輸出效果示例 (rows=5, 正序)

        * 
      * * * 
    * * * * * 
  * * * * * * * 
* * * * * * * * *

進階變體

變體修改點
空心金字塔內層循環判斷首尾行或首尾列輸出 *,其餘輸出空格
數字金字塔星號替換為遞增數字或行號
字符金字塔支持自定義字符集 (如 #, @, ♥)
帶顏色用 * 包裹

空心金字塔實現

<?php
function hollow_pyramid($rows) {
    for ($i = 1; $i <= $rows; $i++) {
        echo str_repeat(' ', ($rows-$i)*2);
        for ($k = 1; $k <= 2*$i-1; $k++) {
            if ($k == 1 || $k == 2*$i-1 || $i == $rows) echo '* ';
            else echo '  ';
        }
        echo '<br/>';
    }
}
hollow_pyramid(6);
?>

性能與最佳實踐

  • 使用 str_repeat() 替代內層循環拼接,性能更好、代碼更簡潔。
  • HTML 中連續空格會折疊,必須用   或 CSS white-space: pre 保持佈局。
  • 大行數 (如 >100) 時,避免在循環中直接 echo,建議累積字符串最後一次性輸出。
  • 教學場景推薦方法二理解邏輯,實際項目推薦方法一封裝復用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved