Contar árboles

En este laboratorio, desarrollarás reporteros recursivos.

En esta página, explorarás un procedimiento para contar los segmentos del árbol fractal, y reconstruirlo de manera recursiva.

En la Unidad 7, construiste Árbol recursivo. Cada árbol está hecho de segmentos de línea.

imagen de árbol fractal
  1. Abre tu proyecto "U7L1-Árbol". ¿Cuántos segmentos de línea hay en un árbol de cada nivel? Completa esta tabla. (Puedes contar a simple vista o usar Snap! para contar).
    nivel conteo de segmentos
    1 1
    2 3
    3  
    4  
    5  
    6  
  2. Habla con tu compañero¿Cómo se compara la cantidad de segmentos en un nivel con la cantidad de segmentos en el nivel anterior?
  3. Construya un bloque que tenga un número de árbol como entrada y la cantidad de segmentos en ese nivel como salida segmentos de árbol (7) reporta 127
Morgan y Betty discuten el código que crearon.
Morgan: Noté un patrón en la tabla. Cada número de segmentos es uno menos que una potencia de 2.
Betty: ¿Cómo se ve tu código?
Morgan: usé un bucle para para construir la potencia de 2, luego resté 1 al final
segmentos de árbol(n){variables de programa(respuesta); fijar(respuesta) a (1); para (i=1 a n){fijar(respuesta) a (respuesta*2)} reportar(respuesta-1)}
Morgan: Al final, el bloque reportar envía el valor final. Puse la ultima operación matematica allí.
Betty: ¡Mira! ¡El mío se ve muy diferente! Hice que el código se pareciera al código de árbol.
Morgan: Interesante... pero no lo entiendo.
Betty: Vuelve a mirar el código de árbol. Usamos recursividad. Construimos un segmento, giramos, llamamos árbol para construir un árbol más pequeño, giramos nuevamente y luego llamamos árbol nuevamente para construir otro árbol más pequeño.
Morgan: ¡Increíble! Podemos pensar en cómo funciona ese algoritmo para escribir el segmentos de árbol reportero recursivamente. Pero podemos ignorar todas las partes móviles y giratorias, ¿Correcto? Déjame intentarlo.
Betty: ¡Correcto! Y no olvides: ¡Los casos base son importantes!

Creaste y trabajaste con bloques recursivos de comando. La recursividad también se puede utilizar en reporteros.

  1. Si aún no lo has hecho, crea un reportero recursivo que reporte el número de segmentos en un árbol de nivel n.
    Recuerda que debes hacer clic en "Apply" antes de poder usar su bloque de forma recursiva en el Editor de bloques.

Aquí está el código de Jasmine para la función segmentos de arbol:

segmentos de árbol(n){si(n=1){reportar(1)}sino{reportar(1+2*segmentos de árbol(n-1))}}
El bloque reportar solo se conecta a los bloques superiores. Esto se debe a que reportar devuelve el resultado de su espacio de entrada, inmediatamente, como la salida del bloque reportero segmentos de arbol. No se ejecuta más código en un reportero después de un bloque reportar.
  1. Habla con tu compañero ¿Cuál es la condición del caso base? ¿Qué hace el programa en ese caso? ¿Por qué es necesario el caso base?
  2. El comando árbol tenía dos llamadas recursivas, pero este código solo tiene una. ¿Por qué?
  3. Vuelve a leer el código del fractal de triángulo y utilízalo como ayuda para construir este reportero recursivo.
    En la Unidad 7, construiste un bloque triángulo fractal. Crea un bloque que reporte el número total de triángulos formados en un fractal de triángulos de nivel n:
    triángulo en nivel (5) fractal reporta 121
  4. "U8L1-Recursive-Reporters"Guarda tu trabajo como U8L1-Reporteros-recursivos