整数平方和

这个问题在这里已经有了答案:

  • 使用Haskell 3回答的正方形总和

  • 根据我的理解,你想在它们之间取两个数字,例如110 ,每个数字(包含),然后取这两个数字的总和。 所以你会想要一些功能

    sumOfSquaresBetween :: Int -> Int -> Int
    sumOfSquaresBetween m n = ???
    

    现在,你必须使用递归,所以这意味着??? 将会是一些使用sumOfSquaresBetween表达式。

    现在有个技巧:如果你知道sumOfSquares nn ,那么你将如何找到sumOfSquares (n - 1) n ? 那么sumOfSquares (n - 2) n呢? 你可以将这一般推广到sumOfSquares mn for m <= n吗? 如果是这样,那么你只是执行了你想要的算法,但是相反。

    希望这个提示有帮助。


    “范围m:n中的整数的平方和(其中m≥n)可以递归计算。”

    我们来分解一下....


    “m:n范围内的整数”

    是从m开始,到n的整数集合

    [m,m + 1,m + 2,... n]

    即 -

    integers in the range 4:8 = [4,5,6,7,8]
    

    “......的正方形”

    正如你可能知道的那样,数字x的平方是x*x ,所以

    squares of integers in the range 4:8 = [16, 26, 36, 49, 64]
    

    “总数是....”

    添加它们

    The sum of the squares of integers in the range 4:8 = 16+26+36+49+64
    

    “....可以是计算机递归的”

    那么,你必须了解递归得到这个....

    包含在定义中的任何函数都是递归的。 当然,你必须小心,如果做得不对,一个递归函数可能会导致无限循环....

    对于Ints,(N-1)递归很常见....如果可以使用(N-1)的计算来评估N的计算,则计算机可以运行数字直到遇到已知值(通常为0 )。 以一个例子来看这更好。

    let func n = sum of integers from 0 to n
    

    (这就像你的问题,但没有广场部分)

    如果你知道的值func (n-1)你可以很容易地计算出的值func n

    func n = n + func (n-1)
    func 0 = 0
    

    计算机将使用func 0来计算func 1func 1来计算func 2等等,一直到N.


    递归有两个常见的(但实际上非常不同)的用法......首先,如上所示,它允许非常干净的函数定义。

    其次,经常在数学中用它来证明所有整数的真值(即 - 证明对于所有的整数都是真的,证明它对0是真的,然后证明它对于N是真的,对N + 1是真的。 ...)。


    真的,解决这个问题的最好方法也是最简单的:使用库函数。

    sumsquares :: Integral a => a -> a -> a
    sumsquares m n = sum (map (^2) (enumFromTo n m))
    

    您只需枚举从nm的数字,将它们中的每一个平方,并取结果的总和。 试图用直接递归来解决这个问题只会让事情变得不必要的复杂。

    练习:编写您自己的本答案中使用的库函数版本。

    -- | Generate the list of all values in the given range.  Result is inclusive.
    enumFromTo :: Enum a => a -> a -> [a]
    
    -- | Apply a function individually to each element of the argument list,
    -- and collect the results as a list, respecting the order of the original.
    map :: (a -> b) -> [a] -> [b]
    
    
    -- | Calculate the sum of a list of numbers.
    sum :: Num a => [a] -> a
    
    链接地址: http://www.djcxy.com/p/80703.html

    上一篇: sum of squares of integers

    下一篇: drawing squares using a recursive method with java