Haskell程式計算N以內所有奇數的和


本教程將幫助我們計算N以內所有奇數的和。Haskell使用函數語言程式設計正規化,這意味著它使用函式來轉換資料,而不是使用迴圈和變數來跟蹤狀態變化。在Haskell中,計算N以內所有奇數的和有不同的方法。

方法1:使用列表推導

在這種方法中,函式sumOddNumbers使用列表推導生成一個包含N以內所有奇數的列表,然後使用sum函式計算列表中數字的和。最終結果顯示給使用者。

演算法

  • 步驟1 − 初始化一個名為“n”的變數,它將儲存要列印N以內所有奇數和的值。

  • 步驟2 − 使用列表推導定義函式sumOddNumbers,如下所示:sumOddNumbers n = sum [x | x <- [1,3..n], x `mod` 2 /= 0]。

  • 步驟3 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。

  • 步驟4 − 初始化一個名為“sum”的變數。一旦呼叫sumOddNumbers函式,它將儲存N以內所有奇數的和。

  • 步驟5 − 顯示最終結果。

示例

在這個示例中,我們將學習如何計算N以內所有奇數的和。

main :: IO ()
main = do
   let n = 10
   let sum = sumOddNumbers n
   putStrLn ("Sum of all odd numbers up to " ++ show n ++ " is: " ++ show sum)
sumOddNumbers :: Int -> Int
sumOddNumbers n = sum [x | x <- [1,3..n], x `mod` 2 /= 0]

輸出

Sum of all odd numbers up to 10 is: 25

方法2:使用遞迴

在這種方法中,函式sumOddNumbers使用遞迴來計算和。當輸入為1時為基本情況,在這種情況下,函式返回1。

演算法

  • 步驟1 − 初始化一個名為“n”的變數,它將儲存要列印N以內所有奇數和的值。

  • 步驟2 − 使用遞迴定義函式sumOddNumbers,其中基本情況是當輸入為1時,函式返回1。對於其他情況,函式檢查輸入是偶數還是奇數。如果輸入為偶數,則遞迴呼叫自身並將輸入遞減1。如果輸入為奇數,則將輸入新增到遞迴呼叫結果中,並將輸入遞減2。

  • 步驟3 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。

  • 步驟4 − 初始化一個名為“sum”的變數。一旦呼叫sumOddNumbers函式,它將儲存N以內所有奇數的和。

  • 步驟5 − 顯示最終結果。

示例

在以下示例中,我們將計算N以內所有奇數的和。

main :: IO ()
main = do
   let n = 10
   let sum = sumOddNumbers n
   putStrLn ("Sum of all odd numbers up to " ++ show n ++ " is: " ++ show sum)
sumOddNumbers :: Int -> Int
sumOddNumbers 1 = 1
sumOddNumbers n | n `mod` 2 == 0 = sumOddNumbers (n-1)
                | otherwise = n + sumOddNumbers (n-2)

輸出

Sum of all odd numbers up to 10 is: 25

方法3:使用foldl函式

此方法對N以內所有奇數的列表使用fold函式,該列表使用列表推導生成。fold函式採用一個二元運算子(在本例中為+)和一個初始累加器值(0),並將運算子應用於列表的元素和累加器,以此方式給出所有奇數的和。

演算法

  • 步驟1 − 初始化一個名為“n”的變數,它將儲存要列印N以內所有奇數和的值。

  • 步驟2 − 使用foldl函式定義函式sumOddNumbers,定義如下:sumOddNumbers n = foldl (+) 0 [x | x <- [1,3..n], x `mod` 2 /= 0]。

  • 步驟3 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。

  • 步驟4 − 初始化一個名為“sum”的變數。一旦呼叫sumOddNumbers函式,它將儲存N以內所有奇數的和。

  • 步驟5 − 顯示結果。

示例

在這個示例中,我們將使用foldl函式計算N以內所有奇數的和。

main :: IO ()
main = do
   let n = 10
   let sum = sumOddNumbers n
   putStrLn ("Sum of all odd numbers up to " ++ show n ++ " is: " ++ show sum)
sumOddNumbers :: Int -> Int
sumOddNumbers n = foldl (+) 0 [x | x <- [1,3..n], x `mod` 2 /= 0]

輸出

Sum of all odd numbers up to 10 is: 25

結論

計算N以內所有奇數的和有不同的方法。在Haskell中,可以使用列表推導、使用foldl函式或使用遞迴來計算N以內所有奇數的和。

更新於: 2023年1月19日

504 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告