如何计算Σ_{i = m} ^ n(m + i)^ n?

时间:2015-03-19 12:10:37

标签: haskell

我目前正在尝试计算以下数额:

Imgur

sum2015 :: Integer->Integer->Integer
sum2015 m n 
 | m>n = 0
 | otherwise = (m+m)^n + sum2015 (m+1) n

例如,sum2015 0 1应返回1。但是,它返回2。我做错了什么?

2 个答案:

答案 0 :(得分:4)

你没有计算这笔钱。请注意,m中的(m + i)^n必须保持不变,但您在此处使用 new m

 | otherwise = … + sum2015 (m+1) n
--                         ^^^^^
--                         oh oh

因此你得到:

sum2015 0 1 
  = (0 + 0)^1 + sum2015 (0 + 1) 1
  = (0 + 0)^1 + (1 + 1)^1 + sum2015 (1 + 1) 1
  = (0 + 0)^1 + (1 + 1)^1 + 0
  =  0        + 2
  =  2

相反,计算所有(m + i)^n并在之后求和:

sum2015 :: Integer -> Integer -> Integer
sum2015 m n = sum . map (\i -> (m + i) ^ n) $ [m..n]

或者,如果您不允许使用它,请使用工作人员:

sum2015 :: Integer -> Integer -> Integer
sum2015 m n = go m
   where go i = ...

答案 1 :(得分:1)

我可以提供这个选项:

sum2015 m n = sum [(m + i) ** n | i <- [m..n]]

首先,我创建了从m到n“[m..n]”的数字列表。 在此列表中的每个i之后,我计算总和的条件。 最后,只需使用“sum”函数获取结果列表。 '**' - 战俘功能

相关问题