Haskell 程序打印空心直角三角星形图案

haskellserver side programmingprogramming

在 Haskell 中,我们可以使用复制函数和递归函数来创建空心直角三角星形图案。

空心直角三角星形图案是由星号 (*) 组成的图案,形成一个直角三角形,中间有空白,如下所示。

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

该形状是通过按特定顺序打印星号来创建的,每行中的星号数量随着行数的增加而增加。

算法

  • 步骤 1 - 使用 replicate/recursion 函数定义 printRow 函数,

  • 步骤 2 - 程序执行将从主函数开始。main() 函数完全控制程序。它写为 main = do。在主函数中,传递一个数字,将空心直角三角形星形图案打印到该数字。

  • 步骤 3 - 初始化名为"n"的变量。它将保存要打印的空心直角三角星形图案的整数。

  • 步骤 4 - 调用函数后,使用"putStrLn"语句将结果打印到控制台。

示例 1

在此方法中,定义了一个函数 printPattern,该函数以整数 n 作为参数并返回一个表示大小为 n 的空心直角三角星形图案的字符串。辅助函数 printRow 以两个整数 n 和 i 作为参数并返回一个表示一行星号和空格的字符串。printRow 函数使用 if 语句来确定该行是否应填充星号,或者它是否应该是两端有星号且中间有空格的空心行。printPattern 函数使用列表推导来生成 n 行星号和空格。

module Main where

printRow :: Int -> Int -> String
printRow n i = if i == n then replicate i '*' ++ "
" else "*" ++ replicate (i - 1) ' ' ++ "*
" printPattern :: Int -> String printPattern n = concat [printRow n i | i <- [1..n]] main :: IO () main = putStr (printPattern 8)

输出

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

示例 2

在此示例中,使用 replicate 函数定义函数来打印空心直角三角形星形图案。

module Main where

printRow :: Int -> Int -> String
printRow n i = if i == 1 then "*
" else "*" ++ replicate (2 * i - 3) ' ' ++ "*
" printPattern :: Int -> String printPattern n = concat [printRow n i | i <- [1..n]] main :: IO () main = putStr (printPattern 8)

输出

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

示例 3

在此方法中,printRow 是一个递归函数,它接受两个参数 n 和 i,分别表示模式的大小和当前行。如果 i 等于 1,则返回一个字符串,其中有一个星号,后跟一个换行符。否则,它将返回一个字符串,其中第一个和最后一个字符为星号,中间部分是等于 2 * i - 3 的空格数(空格数随着 i 的增加而减少),然后递归调用 printRow,将 i - 1 作为更新后的行号。

module Main where

printRow :: Int -> Int -> String
printRow n i
   | i == 1    = "*
" | otherwise = "*" ++ replicate (2 * i - 3) ' ' ++ "*
" ++ printRow n (i - 1) printPattern :: Int -> String printPattern n = printRow n n main :: IO () main = putStr (printPattern 8)

输出:

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

结论

在 Haskell 中,要打印空心直角三角形星形图案,我们可以使用复制和递归函数。


相关文章