Haskell程序 计算N以内所有奇数之和
本教程将帮助我们计算N以内所有奇数的总和。Haskell使用函数式编程范式,这意味着它使用函数来转换数据,而不是使用循环和变量来跟踪状态变化。在Haskell中,有不同的方法来计算N以内所有奇数之和。
方法1:使用列表理解法
在这个方法中,函数sumOddNumbers使用列表理解来生成一个n以内所有奇数的列表,然后使用sum函数来计算列表中的数字之和。最后的结果会显示给用户。
算法
- 第1步 – 一个名为 “n “的变量被初始化,它将保存所有奇数之和的打印值。
-
第2步–函数sumOddNumbers使用列表理解法定义为:sumOddNumbers n = sum [x | x <- [1,3..n], x
mod
2 /= 0]。 -
第3步 – 程序的执行将从主函数开始。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 “的变量正在被初始化,它将保存所有奇数之和的打印值。
-
第2步 – 函数sumOddNumbers是用递归法定义的,其中,基本情况是当输入是1时,在这种情况下,函数返回1。对于其他情况,该函数检查输入是偶数还是奇数。如果输入是偶数,它将递归调用自己,并将输入减去1;如果输入是奇数,它将输入加入递归调用的结果,并将输入减去2。
-
第3步 – 程序的执行将从主函数开始。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以内的奇数列表上使用一个折叠函数,这个列表是用列表理解法生成的。折叠函数需要一个二进制运算符(这里是+)和一个初始累加器值(0),并将运算符应用于列表中的元素和累加器,这样就可以得到所有奇数的总和。
算法
- 第1步 – 一个名为 “n “的变量正在被初始化,它将保存所有奇数之和的打印值。
-
第2步–函数sumOddNumbers是用foldl函数定义的,其定义为:sumOddNumbers n = foldl (+) 0 [x | x <- [1,3..n], x
mod
2 /= 0]。 -
第3步 – 程序的执行将从主函数开始。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中,N以内所有奇数的总和可以通过使用列表理解、使用foldl函数或使用递归来计算。