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以內所有奇數的和。