¿Cuáles son los ejemplos del mundo real que puedo usar para ilustrar la recursividad de mi clase de introducción CS?

El número de formas en que puede ordenar n objetos (función factorial):

Digamos que tienes n objetos. Digamos que la función f (n) da el número de formas en que puede ordenarlos

Debe elegir uno para ser el primero, y puede elegir cualquiera de los n objetos para ser el primero. Después de seleccionar ese como el primero, el número de objetos que quedan por ordenar es n – 1, por lo que debe ser el caso que

f (n) = n * f (n – 1)

si reemplazamos n con m = n – 1, veríamos que

f (n) = f (m + 1) = (m + 1) * f (m)

Ahora suponga que desea calcular f (5)

Hay 5 objetos que puede elegir para ser el primero, por lo que el número de posibles pedidos es

f (5) = 5 * f (4)

Hay cuatro objetos posibles para elegir como el primero del conjunto restante, por lo que

f (4) = 4 * f (3)

f (3) = 3 * f (2)

f (2) = 2 * f (1)

Solo hay 1 forma de ordenar 1 objeto, entonces f (1) = 1 (ese es el caso base)

Ahora sustituya este valor y vuelva a subir utilizando la relación de recursión

f (n + 1) = (n + 1) * f (n)

f (2) = 2 * f (1) = 2 * 1 = 2

f (3) = 3 * f (2) = 3 * 2 = 6

f (4) = 4 * f (3) = 4 * 6 = 24

f (5) = 5 * 24 = 120

La función f (n) normalmente se designa como n!

Eso es recursividad! (recurra a su camino hacia el caso base (reduce cada problema a un problema “más simple”), luego repita su camino de regreso a donde comenzó).

Use Processing.org y L-systems para dibujar bonitas imágenes inspiradas en bio utilizando la recursividad.

Del Wiki para L-Systems pero vale la pena leer toda la página.

Los sistemas L fueron introducidos y desarrollados en 1968 por Aristid Lindenmayer, biólogo teórico y botánico húngaro de la Universidad de Utrecht. Lindenmayer utilizó sistemas L para describir el comportamiento de las células vegetales y modelar los procesos de crecimiento del desarrollo de las plantas. Los sistemas L también se han usado para modelar la morfología de una variedad de organismos [1] y se pueden usar para generar fractales autosimilares, como los sistemas de funciones iteradas.

La naturaleza recursiva de las reglas del sistema L conduce a la autosimilitud y, por lo tanto, las formas fractales son fáciles de describir con un sistema L. Los modelos de plantas y las formas orgánicas de aspecto natural son fáciles de definir, ya que al aumentar el nivel de recurrencia, la forma lentamente ‘crece’ y se vuelve más compleja. Los sistemas Lindenmayer también son populares en la generación de vida artificial.

Un ejemplo de la vida real que se me ocurre, desde mi experiencia, es la depresión. Bastante gracioso ¿eh?

Echa un vistazo al siguiente código: –

Depresión vacía ()

{

if (Motivación == 1)

{

salida();

}

De lo contrario, depresión ();

}

Así es como la función “depresión ()” continúa llamándose a sí misma hasta que la motivación se cruce en su camino.

La función “depresión ()” se llama de alguna manera desde la función “principal ()” (nuestra vida), y permanece en acción hasta que alguien o algo nos motive. Y en el momento en que nos motivamos (motivación == 1) la función “exit ()” hace su trabajo.

Pídale a su clase de estudiantes que identifique qué estudiante es el más bajo y el más alto. Las reglas son que nadie puede levantarse o anunciar públicamente su altura, pero usted puede comunicarse y comparar su altura con cualquiera de sus vecinos.

Descubrirán el algoritmo recursivo de dividir y conquistar. Esperemos que eso no requiera demasiadas pistas.

La clase debe dividirse por la mitad con dos líderes sentados uno al lado del otro en el medio, con ambos líderes responsables de averiguar su estudiante más alto y más bajo. Luego se divide una y otra vez … hasta que cada alumno se encuentre en un grupo de 2 a 3 alumnos donde puedan comunicarse y comparar sus alturas sin levantarse.

Una vez que se determina cada estudiante más alto y más bajo de cada grupo pequeño (la condición base), los resultados de los grupos adyacentes se comparan y se convierten en grupos cada vez más grandes. Finalmente, los 2 líderes finales comparan los resultados y usted tiene su respuesta.

¿Has intentado producir un reflejo infinito de espejos enfrentando dos espejos entre sí? Esa es la recursión sin condición de base.

El problema factorial y las torres del problema de Hanoi son las introducciones clásicas a la recursividad. Aunque es un candidato terrible para la recursividad, las secuencias de Fibonacci también son una buena introducción porque se definen de forma recursiva de forma natural y se pueden usar para mostrar las limitaciones (de tiempo) de la recursividad.

Cuando sus clases de CS entren en estructuras de datos como listas y árboles vinculados, encontrará que muchas rutinas para ellos pueden codificarse de forma iterativa o recursiva y eso dará una buena lección sobre las características que ambos tienen y cómo convertir un formulario en otro.

Te diré un hecho interesante que puedes usar como ejemplo para la recursión.

¿Alguna vez has buscado en Google la recursividad?

si hubiera buscado en Google, probablemente habría visto que Google seguía sugiriendo “Quiso decir: recursión ” aunque la ortografía es correcta. Esto es algo que Google nos ayuda a comprender la recursión indirectamente.

Dile a la gente que vea la película Inception de Christopher Nolan . Explíqueles Recursión usando Sueño dentro de un sueño dentro de un concepto de sueño.

Como hay tres niveles de recursiones (sueños) y la forma en que las personas usan para salir del sueño, también puede usar esta analogía en la recursividad.

Explica por qué se usa un tótem y su analogía en la recursión.

Explique cómo varía el tiempo en diferentes niveles y su analogía en el diseño de algoritmos y el cálculo de la complejidad del tiempo.

PD Death of Mal significa lo mal que pueden salir las cosas si eres malo en los niveles de recursión.

Además, Inception es una buena película para ver si el público objetivo son los próximos informáticos 🙂.

Inicio – Wikipedia

Inicio (2010)

Solo es mi opinión.

El gran ejemplo de algoritmos recursivos es la vida. La vida funciona así:

función de vida (genoma) {
vivo = verdadero;
mientras (vivo) {
tratar {
comer();
crecer();
sobrevivir();
if (readyToMate ()) {
matesGenome = findMate ();
// comienza un nuevo proceso
vida (mixGenes (genoma, matesGenome));
}
} catch (DeathException e) {
vivo = falso;
}
}
}

¿Cuáles son los ejemplos del mundo real que puedo usar para ilustrar la recursividad de mi clase de introducción CS?

Si quieres un ejemplo con el que estén familiarizados, probablemente iría con álgebra.

Por ejemplo, simplifique esta expresión: (3x + x + 4y + 2y) * (5x + 7y – 3x + 2y).

Lo primero que debe hacer es dividir esto en problemas más pequeños. Simplifica el lado izquierdo de la multiplicación, luego simplifica el derecho. Luego los multiplica, luego simplifica eso.

Lo primero que hizo fue ver que puede dividir el problema en dos problemas más pequeños. Luego observaste cada uno de los problemas más pequeños y dijiste “Puedo hacer esto trivialmente”. Luego los simplificaste. Luego les hiciste algo, luego simplificaste nuevamente.

Si quieres algo que tal vez no hayan visto (y si la clase es bastante pequeña), puedes probar un ejemplo del que he oído hablar, pero que no he visto en la vida real. Primero, alinee a todos contra una pared. Luego, pregúntele a la persona en un extremo cuántos estudiantes hay en la clase (suponiendo que haya suficientes para que no sepan trivialmente). Luego pídales que le pregunten a la persona a su izquierda cuántos estudiantes hay al otro lado.

El estudiante 1 pregunta al estudiante 2, quién no sabe. Luego le preguntan al estudiante 3. Esto continúa hasta que el último estudiante (por ejemplo, # 23) dice “Ninguno”. Luego el estudiante 22 gira y dice “1”, el estudiante 21 gira y dice “2”, etc. -al-último-alumno diría “21” (21 estudiantes al otro lado de ellos). La persona que preguntó originalmente sabría que hay 22 estudiantes de ese lado, de modo que 23 estudiantes en total. Al final, sabes cuántos estudiantes hay en total sin que nadie responda ninguna pregunta, excepto un caso trivial (“ninguno”) o basar su respuesta en la de otra persona.

Muchas cosas en el ejército son naturalmente recursivas. Por ejemplo:

El general en un ejército quiere desarmar minas terrestres. Él formula una orden:

“1. Si no tienes un subordinado: ve y desarma una mina.

De lo contrario, si tiene subordinados: entregue una copia de esta orden a cada uno de sus subordinados, luego espere hasta que le traigan minas desarmadas.

2. Luego, para ambos casos: pasa todas las minas que tengas a tu jefe, quien te dio esta orden.

General inicia la ejecución de esta orden. Él tiene subordinados: dos capitanes, por lo que les da a ambos el mismo orden, y ahora está esperando su respuesta. Cada capitán tiene cuatro subordinados: cuatro sargentos, por lo que cada capitán da la misma orden a sus sargentos, y ahora está esperando su respuesta. Cada sargento tiene nueve subordinados: nueve soldados, por lo que cada sargento da la misma orden a todos sus soldados, y ahora está esperando su respuesta. Cada privado pobre no tiene un subordinado, por lo que cada privado va y desarma una mina.

Después de desarmar una mina, un privado lee la segunda parte de la orden y lleva la mina que ha desarmado a su sargento. El sargento espera hasta que todos sus soldados traigan minas, y luego es hora de que el sargento lea la segunda parte de la orden y traiga todas las minas que tiene a su jefe, el capitán, y también lo hacen todos los demás sargentos. Los capitanes de la misma manera llevan todas las minas a general. El general no tiene un jefe, por lo que ahora sabe que el pedido está completo.

Hay varias cosas bien ilustradas para discutir en este ejemplo:

  • ¿Qué pasa si se cambia la jerarquía y mañana habrá un coronel entre el general y el capitán?
  • ¿Es importante para el capitán que desarma exactamente las minas? Es fácil ver que para el capitán parece que fue el sargento quien desarmó varias minas;
  • aquí, hemos establecido claramente la condición de recursión y es fácil ver cómo la recursividad se profundiza y cómo vuelve a acumular los resultados;
  • es fácil ver que el orden (código) es exactamente el mismo en cada nivel de recursión;
  • No es difícil demostrar que la recursión a menudo se puede transformar en un ciclo de tiempo;
  • Finalmente, es fácil demostrar que la recursión puede no tener sentido. Si el problema era eliminar todas las minas del campo minado, esta orden podría no resolver el problema.

Escher dibujó algunas cosas triviales y muchas de ellas con recursión. Como éste.

Aquí está como un GIF animado:

Pintura GIF – Encuentra y comparte en GIPHY

Hola Tevon!

Realmente no pareces el tipo de “fiesta dura”, por lo que puedes ser ignorante de algunas de las cosas divertidas y geniales que hacen los adultos, pero hay algo llamado “Bomba de sake”. ¡Es cuando un tipo de alcohol se deja caer en otro tipo de alcohol y luego se consume rápidamente entre amigos! Es una forma divertida y peculiar de ilustrar el proceso de recursión 😉 ¡Podría considerarse recursivo porque una vez que haces una con tus amigos quieres hacer un montón!

Me alegra ver que estás trabajando duro y recuerda …

¡PROTEGE EL AX!

Use la recursividad para mostrar cómo cada día de la semana uno tiene que venir a clase.

Recursividad:

Asumir: la semana comienza con el lunes

gotoClass (día) {

Si (día> 7) -> día = 0

If (día> 5) -> chillAtHome ()

gotoClass (día + 1);

}

Usando bucles:

Para (lunes a viernes) {

Ir a clase

}

Pero uno tiene que ir a la escuela todos los años, no solo por una semana

Supongamos: uno tiene que ir a la escuela durante 14 años

Para (año 0 a 14) {

Para (mes 0 a 11) {

Para (bucle de día de la semana): gotoClass

}

}

El mejor ejemplo del mundo real que se me ocurre ahora es Matryoshka Dolls.

Sigues abriendo, bajando cada capa. Hasta que finalmente llegues al más pequeño, que es tu condición de salida. Luego regresas a través de las capas, cerrando cada una más grande hasta que hayas cerrado la primera que abriste. En el camino puedes ir y venir en el medio. El orden de las capas está establecido y no puede omitir las capas que van hacia arriba o hacia abajo.

Digamos que quiere comprar un regalo costoso pero simplemente no tiene suficiente dinero.

Lo que puedes hacer es:

  1. Solicite una tarjeta de crédito C0 y realice un adelanto en efectivo. Ahora tienes dinero para comprar el regalo.
  2. En la fecha de pago de C0, solicita otra tarjeta de crédito C1 y realiza un adelanto en efectivo. Ahora tiene dinero para pagar el saldo de C0.
  3. En la fecha de pago de C1, solicita otra tarjeta de crédito C2 y realiza un adelanto en efectivo. Ahora tiene dinero para pagar el saldo de C1.
  4. En la fecha de pago de C2, solicita otra tarjeta de crédito C3 y realiza un adelanto en efectivo. Ahora tiene dinero para pagar el saldo de C2.
  5. ……

Esta es la magia de la recursión. No tiene que hacer nada esencial y su problema está resuelto. Lo único difícil es que necesita encontrar a alguien para pagar el saldo de su última tarjeta de crédito.

Suponga que está sentado en una sala de cine viendo su película favorita. Estás sentado atrás al final y quieres saber cuántas filas hay frente a ti.

Tu también puedes :-

  • Use la iteración: levántese de su asiento y comience a contar cada fila una por una hasta el final.

O

  • Use recusrion: pregúntele al tipo que está delante de usted cuántas filas hay frente a él. Ese tipo le hará la misma pregunta al tipo que está sentado frente a él y le dirá (regrese) lo que el tipo le dijo + 1 a usted. Esto continuará hasta que el hombre en la última fila devuelva 0 al hombre anterior (caso base).

Echa un vistazo a la isla Manitoulin, la isla más grande de un lago en el mundo, en el lago Hurón. La isla Manitoulin contiene lagos. Algunos de estos lagos son lo suficientemente grandes como para contener islas. Entonces tienes los océanos que rodean América del Norte, el lago Hurón, la isla Manitoulin, los lagos circundantes, las islas circundantes.

El mejor ejemplo es probablemente la estructura de carpetas en su computadora. Cualquier cosa relacionada con datos desconocidos que se puedan anidar de alguna manera. Para cualquier otra cosa, debe evitar la recurrencia, ya que es difícil de obtener y generalmente existen mejores soluciones.

¡Los números fabonacci son el camino a seguir!

More Interesting

¿Cómo podemos lograr la inserción en el hash en el peor de los casos en O (1) mediante el uso de la matriz, mientras que las matrices tienen problemas de extensión en filledup?

¿Qué es binario y por qué lo usan las computadoras?

¿Debo compartir un nuevo algoritmo de clasificación que escribí? ¿Existe algún potencial monetario en un algoritmo? De ser así, ¿cómo capitalizo?

¿Qué es un algoritmo explicado para que las personas normales puedan entender y también cómo se hacen?

Cómo encontrar el número máximo de árboles de expansión mínima en un gráfico

Para aprender la codificación, ¿primero se debe aprender un lenguaje o algoritmos?

¿Podría alguien ayudarme con el problema del algoritmo 'Intervalo casi ordenado'?

¿Cuál es la diferencia entre los algoritmos de programación de tareas y los algoritmos de equilibrio de carga (estáticos y dinámicos)?

¿Cómo se puede calcular su edad en días? Necesito el algoritmo más simplificado para resolverlo.

Insertar un elemento en un montón toma O (log n). ¿Aún si insertamos n elementos en el montón, resulta ser O (n)?

¿Codeforces tiene un problema de ética?

¿Cuál es la complejidad del algoritmo de Horner si encontramos P (x) calculando cada término del polinomio desde cero?

¿Aproximadamente cuánto más rápido es el GCD binario que el algoritmo euclidiano para la aritmética de precisión fija en las computadoras actuales?

¿Se introdujo la recursión a propósito?

¿Debería evitarse siempre goto / JMP?