Recursion 在球拍上画一个Sierpinski三角形

Recursion 在球拍上画一个Sierpinski三角形,recursion,nested,racket,Recursion,Nested,Racket,我试图在Drracket中做一个嵌套的金字塔,但我撞到了一堵墙。我希望得到一些帮助。我需要嵌套棱锥体输出(嵌套棱锥体(圆10)1)或(嵌套棱锥体(圆10)3),并更改棱锥体的大小 (define (nested-pyramid p) (define pyramid p) (define p 1) (if (= p 1)) pyramid p (else (- p 1)) nested-pyramid p) 我对金字塔p的代码是: (define (pyramid p)

我试图在Drracket中做一个嵌套的金字塔,但我撞到了一堵墙。我希望得到一些帮助。我需要嵌套棱锥体输出(嵌套棱锥体(圆10)1)或(嵌套棱锥体(圆10)3),并更改棱锥体的大小

(define (nested-pyramid p)
  (define pyramid p)
  (define p 1)
 (if (= p 1))
      pyramid p
(else (- p 1))
  nested-pyramid p)
我对金字塔p的代码是:

(define (pyramid p)
  (define two-p (hc-append p p))
  (vc-append p two-p ))

假设n是大于或等于1的整数,则从深度为n的形状p创建嵌套棱锥体:

  • 如果n为1,则从形状p创建一个棱锥体
  • 否则n必须大于1,因此从p创建深度为n-1的嵌套棱锥体
您可以使用
(棱锥体p)
从p创建棱锥体。然而,
pyramid
可以比你的定义简单得多:如果你有一句话

(define ...
  (define x ...)
  ... use x exactly once ...)
通常,最好只使用创建
x
的表单,而不是创建一个只使用一次的变量。所以

(define (pyramid p)
  (define two-p (hc-append p p))
  (vc-append p two-p))
可以改为

(define (pyramid p)
  (vc-append p (hc-append p p)))
思考这两个版本的
金字塔
之间的差异可能有助于编写
嵌套金字塔
。如果您多次使用某个东西,那么为它创建一个名称可能会更清晰,也可能更高效:

(define (rocket p)
  (define three (hc-append p p p))
  (vc-append p
             (hc-append p p)
             three
             three
             three
             three
             three))

什么是嵌套金字塔?创建金字塔后,我们的导师希望我们能够将这些金字塔嵌套到任意深度;也就是说,他希望我们能够画出一个圆形金字塔的金字塔,或者一个圆形金字塔的金字塔。当然,这是一个称为Sierpinski三角形的分形。我不确定你想要什么,但描述有帮助。谢谢