Haskell程式列印半菱形星號圖案
我們可以使用遞迴和複製函式在Haskell中建立一個半菱形星號圖案。半菱形星號圖案是由星號(*)排列成半菱形形狀的圖案。它通常透過以金字塔形狀列印一系列星號來建立,從第一行的一個星號開始,第二行兩個星號,依此類推,直到中間行包含最大數量的星號。從那一行開始,星號的數量減少,直到最後一行只有一個星號。
演算法
步驟1 - 使用replicate/遞迴函式定義printRow函式
步驟2 - 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。在main函式中,傳遞一個數字,以此數字為上限列印半菱形星號圖案。
步驟3 - 初始化名為“n”的變數。它將儲存要列印半菱形星號圖案的上限整數。
步驟4 - 函式呼叫後,使用‘putStrLn’語句將結果列印到控制檯。
示例1
在這個例子中,printRow是一個遞迴函式,它接受兩個引數n和i,分別表示圖案的大小和當前行。如果i等於0,它返回一個換行符。如果i小於等於n div 2,它返回一個字串,該字串包含等於n div 2 - i的空格,後跟一個星號,後跟一個換行符,然後遞迴呼叫printRow,其中i - 1作為更新的行號。否則,它返回一個字串,該字串包含等於i - n div 2的空格,後跟一個星號,後跟一個換行符,然後遞迴呼叫printRow,其中i - 1作為更新的行號。
module Main where printRow :: Int -> Int -> String printRow n i | i == 0 = "
" | i <= n `div` 2 = " " ++ replicate (n `div` 2 - i) ' ' ++ "*" ++ "
" ++ printRow n (i - 1) | otherwise = " " ++ replicate (i - n `div` 2) ' ' ++ "*" ++ "
" ++ printRow n (i - 1) printPattern :: Int -> String printPattern n = printRow n (n - 1) main :: IO () main = putStr (printPattern 8)
輸出
* * * * * * *
示例2
在這個例子中,printRow函式接受兩個引數n和i,分別表示圖案的大小和當前行。它返回一個字串,該字串包含等於n div2 - abs (ndiv 2 - i)的空格,後跟一個星號和一個換行符。
printPattern函式接受一個整數n作為引數,並返回一個字串,該字串透過連線printRow在範圍[0..n - 1]中每一行的結果建立。
module Main where printRow :: Int -> Int -> String printRow n i = replicate (n `div` 2 - abs (n `div` 2 - i)) ' ' ++ "*
" printPattern :: Int -> String printPattern n = concat [ printRow n i | i <- [0..n - 1]] main :: IO () main = putStr (printPattern 8)
輸出
*
*
*
*
*
*
*
*
結論
在Haskell中,要列印半菱形星號圖案,我們可以使用replicate、div和遞迴函式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP