Escribir reporteros recursivos

En esta página, construirás un bloque factorial recursivo y varios bloques recursivos que manejen cadenas.

¡Di 9! como "nueve factorial", no NUEVE!
La función factorial n! se define como el producto de los números enteros de 1 a n.

  1. El valor de 9! es 362.880. Encuentra el valor de 10!.
    No olvides el consejo de Betty: ¡Los casos base son importantes!
  2. Describe la relación entre 37! y 36!.
  3. Usa estas ideas para construir un factorial bloque usando un reportero recursivo.

A menudo, los comandos recursivos tienen una estructura como esta, con múltiples comandos en el caso recursivo:

Los comandos recursivos pueden incluso tener múltiples llamadas recursivas (árbol es un buen ejemplo; llamamos árbol dos veces desde dentro de una sola llamada a árbol).
recursividad(entrada){si(¿caso base?(entrada){hacer algo simple} sino{hacer algo; recursividad(entrada pequeña); hacer algo}}

Los reporteros recursivos tienen una estructura diferente porque pueden reportar solo un valor. Porque el bloque reportar reporta una respuesta, deberás crear la respuesta antes o dentro de la llamada de bloque reportar. Por eso, esto no es posible:

Ni siquiera puedes construir este programa porque no se te permitirá conectar ningún bloque debajo un bloque reportar.
No se puede hacer esto: reportero recursivo(entrada){si(¿caso base?(entrada){reportar (algo simple)} else{reportar algo; reportar(reportero recursivo(entrada pequeña)); reportar algo}}

Los programas de procesamiento de textos cuentan el número de palabras y letras en los documentos. Una forma de contar el número de letras en una frase es usar un reportero recursivo.

  1. La frase "en el curso de los acontecimientos humanos" tiene 36 letras. ¿Cuántas letras hay en la frase "Cuando en el curso de los acontecimientos humanos"?
  2. La recursividad siempre necesita un caso base para evitar que el script se llame a sí mismo para siempre. ¿Que tipo de base caso podríamos usar para esta situación?
  3. Cree un bloque de conteo de letras que tome una lista de palabras como entrada y reporte el total número de letras en todas las palabras. El bloque todas menos la primera letra puede ser útil, pero hay más de una manera de hacer esto.
    conteo de letras(lista{Nosotros, el, Pueblo, de, los, Estados, Unidos}) reporta 35
  4. Crea tu propia versión del bloque unir palabras. Este bloque ingresa una lista y genera una oración de cadena, con espacios:
    unir palabras nuevo(lista{Nosotros, el, Pueblo, de, los, Estados, Unidos}) reporta -Nosotros el Pueblo de los Estados Unidos

Las operaciones de lista todas menos la primera letra y delante de se usan con frecuencia en reporteros recursivos.

  1. Crea este bloque plurales, luego describe cómo funciona. (Ya has construido una más simple versión de plurales usando mapear; queremos que veas que el mismo problema puede ser resuelto de múltiples maneras.)
    plurales(palabras){si(¿vacía?(palabras)){reportar(lista vacía)} sino{reportar((unir (elemento 1 de palabras)(s) delante de (plurales(todas menos la primera letra (palabras)))}}