Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 球拍/方案中的和平方_Math_Scheme_Lisp_Racket - Fatal编程技术网

Math 球拍/方案中的和平方

Math 球拍/方案中的和平方,math,scheme,lisp,racket,Math,Scheme,Lisp,Racket,我在用racket/scheme递归地写出和的平方。代码对数字求和,但不对平方。我不知道我做错了什么。如果我通过10,应该是3025 (define (squareOfSums n) (if (= n 0) 0 (expt (+ n (squareOfSums (- n 1))) 2))) 您应该只在递归结束时执行一次平方运算。目前,您的代码在每次迭代中都是方形的。解决这个问题的一种方法是将求和部分分离成一个helper过程,并将调用它的结果平方。像这样: (define (squ

我在用racket/scheme递归地写出和的平方。代码对数字求和,但不对平方。我不知道我做错了什么。如果我通过10,应该是3025

(define (squareOfSums n)
 (if (= n 0)
  0
   (expt (+ n (squareOfSums (- n 1))) 2)))

您应该只在递归结束时执行一次平方运算。目前,您的代码在每次迭代中都是方形的。解决这个问题的一种方法是将求和部分分离成一个helper过程,并将调用它的结果平方。像这样:

(define (squareOfSums n)
  (define (sum n)
    (if (= n 0)
        0
        (+ n (sum (- n 1)))))
  (sqr (sum n)))
还有,你知道吗,把所有的自然数加到n上有一个a?这是一个更好的解决方案,不需要递归:

(define (squareOfSums n)
  (sqr (/ (* n (+ n 1)) 2)))
无论哪种方式,它都能按预期工作:

(squareOfSums 10)
=> 3025

您应该只在递归结束时执行一次平方运算。目前,您的代码在每次迭代中都是方形的。解决这个问题的一种方法是将求和部分分离成一个helper过程,并将调用它的结果平方。像这样:

(define (squareOfSums n)
  (define (sum n)
    (if (= n 0)
        0
        (+ n (sum (- n 1)))))
  (sqr (sum n)))
还有,你知道吗,把所有的自然数加到n上有一个a?这是一个更好的解决方案,不需要递归:

(define (squareOfSums n)
  (sqr (/ (* n (+ n 1)) 2)))
无论哪种方式,它都能按预期工作:

(squareOfSums 10)
=> 3025

我认为这是一个惯用的版本,但我希望任何懂数学的人都不会写:

(define (square-of-sums n)
  (let loop ([m n] [sum 0])
    (if (> m 0)
        (loop (- m 1) (+ sum m))
        (* sum sum))))
(define (square-of-sums n)
  (expt (/ (* n (+ n 1)) 2) 2))
这是一个懂数学的人会写的版本:

(define (square-of-sums n)
  (let loop ([m n] [sum 0])
    (if (> m 0)
        (loop (- m 1) (+ sum m))
        (* sum sum))))
(define (square-of-sums n)
  (expt (/ (* n (+ n 1)) 2) 2))

我希望人们不要用众所周知的封闭式解决方案来问家庭作业问题:这是在积极鼓励人们编写糟糕的程序。

我认为这是一个惯用的版本,但我希望任何懂数学的人都不会这样写:

(define (square-of-sums n)
  (let loop ([m n] [sum 0])
    (if (> m 0)
        (loop (- m 1) (+ sum m))
        (* sum sum))))
(define (square-of-sums n)
  (expt (/ (* n (+ n 1)) 2) 2))
这是一个懂数学的人会写的版本:

(define (square-of-sums n)
  (let loop ([m n] [sum 0])
    (if (> m 0)
        (loop (- m 1) (+ sum m))
        (* sum sum))))
(define (square-of-sums n)
  (expt (/ (* n (+ n 1)) 2) 2))

我希望人们不要用众所周知的封闭式解决方案来问家庭作业问题:这会积极鼓励人们编写糟糕的程序。

如果你从函数开始,先写一些例子,就可以更容易地想象出函数的工作方式

以下是三个例子:

(check-expect (SquareOfSums 0)  0)
(check-expect (SquareOfSums 2)  (sqr (+ 2 1))) ;9
(check-expect (SquareOfSums 10) (sqr (+ 10 9 8 7 6 5 4 3 2 1))) ;3025
我们可以清楚地看到,我们正在使用两个操作符,这应该表明我们需要使用某种帮助函数来帮助我们

我们可以从SUMS的主要功能开始:

现在,我们必须创建helper函数

使用加法运算符的次数取决于使用的次数。由于这个原因,我们将不得不使用自然递归

使用自然递归需要某种基本情况,以便函数在某个地方“结束”。在本例中,这是值0

既然我们已经确定了基本情况,我们就可以轻松创建帮助函数了:

(define (sum n)
  (if (= 0 n)
      0
      (+ n (sum (sub1 n)))))

如果你从函数开始写一些例子,你会更容易想象你的函数是如何工作的

以下是三个例子:

(check-expect (SquareOfSums 0)  0)
(check-expect (SquareOfSums 2)  (sqr (+ 2 1))) ;9
(check-expect (SquareOfSums 10) (sqr (+ 10 9 8 7 6 5 4 3 2 1))) ;3025
我们可以清楚地看到,我们正在使用两个操作符,这应该表明我们需要使用某种帮助函数来帮助我们

我们可以从SUMS的主要功能开始:

现在,我们必须创建helper函数

使用加法运算符的次数取决于使用的次数。由于这个原因,我们将不得不使用自然递归

使用自然递归需要某种基本情况,以便函数在某个地方“结束”。在本例中,这是值0

既然我们已经确定了基本情况,我们就可以轻松创建帮助函数了:

(define (sum n)
  (if (= 0 n)
      0
      (+ n (sum (sub1 n)))))

也许是因为所有递归也都会求其部分和的平方?首先求和,然后求结果的平方。也许是因为所有递归也会求其部分和的平方?首先求和,然后求结果的平方。