En esta práctica de laboratorio, construirás un programa para dibujar árboles que utiliza la recursión para dibujar las ramas creando árboles cada vez más pequeños.
En esta página, explorarás la anidación del código para árboles dentro del código para árboles.
PG: Change. I still have great reservations about the pedagogy. We are telling kids, step by step, how to do something before they have a picture of what they're trying to control. At least two other alternatives: create árbol governed by tamaño (as we do in Unit 1 or 2) and embed, /then/ show how one might want to control growth by count rather than tamaño; create árbol by abstract model (trunk, branch, and leaf, which is also the base case) showing structural similarities and differences. Neither of these succeeds in getting to the generic "formula"—stop rule dependent on decrementing input, body, recursive call—but, in my mind, that's a culmination, not a place to start.
We need to add pink boxes to this whole unit. --MF, 4/3/19
El patrón de ramificación de muchas plantas tiene una estructura fractal: las partes más pequeñas son como copias en miniatura de la planta completa.
Un fractal es un patrón repetido infinito formado por copias (o ligeras variaciones) de la misma forma. En esta imagen, la rama verde tiene (esencialmente) la misma forma que la imagen completa.
árbol 1
. Parece sencillo, pero pronto se volverá más complicado.árbol 1
para dibujar las ramas en árbol 2
es usar abstracción.árbol 2
que utilice árbol 1
como sus ramas. árbol 1
deja de ejecutarse. ¿Por qué es esencial para que funcione árbol 2
?Transparencia del estado (state transparency) : volver a poner todo (objeto, lápiz, etc.) exactamente como estaba cuando comenzaste, es importante cuando los bloques dependen de otros bloques. Por lo general, esto significa devolver el objeto a la misma posición y dirección, y el lápiz al mismo color y tamaño que tenían.
árbol 3
que use el bloque árbol 2
como ramas.
árbol 4
que use el bloque árbol 3
como ramas.árbol 5
que utilice el bloque árbol 4
. Al ejecutar Todos estos bloques se ven esencialmente iguales excepto que árbol 5
usa árbol 4
, mientras que árbol 4
usa árbol 3
, y así sucesivamente. Entonces tiene sentido preguntarse si podemos reemplazar todos estos bloques con un solo bloque árbol
, usando una variable para el número que cambia.
Usar un bloque dentro de sí mismo se llama recursividad (recursion) .
árbol
. árbol 2
y árbol 3
, y por qué se necesitan estas diferencias?árbol, nivel: 9 tamaño: 50
.
tree 1 size: (size)
, so that it later changes the hard coded numbers into a variabletree (level) size: (size)
. Then text needs to be brought in line.