Conozco el concepto de recursión, pero aún no pude resolver la permutación de un problema propio de String, Towers of Hanoi utilizando técnicas de recursión. ¿Alguien enfrenta el mismo problema?

En el pasado, escribí solo while loop, luego usé principalmente el for-loop más general.

La recursión fue muy difícil para mí. No solo es difícil, sino muy difícil. Simplemente porque mi trabajo no incluía árboles o gráficos, o puede ser que no los conozco bien, así que los evité.

>> Incluso si aprendí lo olvidé. Pensamos principalmente en lineal, como el bucle for, no estamos acostumbrados a la recursión más en la vida real.

Para una de las mejores explicaciones a continuación:

  1. Para la recursividad: ver: Khan Academy
  2. Para las torres de Hanoi: Academia Khan
  3. Para Permutación: next_permutation simple y su implementación: consulte std :: next_permutation – cppreference.com

Solo para decirte que no eres la única persona, intenté escribir permutación un día, podría escribir después de 30 minutos, al día siguiente me desperté y escribí en 40 minutos.

  1. Entonces, puede ser, intentar en la noche es bueno para que pensemos mientras dormimos cómo resolver la permutación o algún otro problema de recurrencia.
  2. O, puede ser, el recuerdo pacífico de la mañana fue bueno para resolver.

Aprendí un poco de árboles de Wikipedia, escribí algunos programas desde cero (ver, ManoharPoreddy / datastructures), puedes ver que es solo hace 2 años. Hace un año, aprendí Graphs, resolví unos 10 problemas en un sitio web de CP, después de esto, la recursión me parecía normal, siempre, no lo puedes creer, pero es real, descubrí que la mente era muy poderosa, entendía patrones y aceptó que la recursión / árbol / gráficos / etc. también sea normal, como si fuera un bucle for para mí.

Incluso hoy, me sorprende, pero ahora los hago de manera normal, pero soy la misma persona que encontró la recursión muy difícil hace más de 2 años.

  1. Entonces, puede ser, la práctica ayudará.
    1. Aquí, no se preocupe por no completar un problema, deje que el cerebro entienda la recursividad / árbol / gráfico en días sucesivos. Algún día pronto verá que la recursividad es muy normal.

Espero que haya ayudado.

Sí. Lo enfrenté por un largo tiempo hasta que comencé a resolver todos los problemas de forma recursiva.

Como usted dice que comprende el concepto de recursión, debe saber cómo dividir un gran problema en subproblemas y también debe comprender el concepto de caso base o caso de terminación de recursión.

Noté que la razón principal por la que no pude resolver estos problemas fue porque no estaba dividiendo el problema en subproblemas. Estaba tratando de resolverlo sin dividirlo en subproblemas. Incluso después de eso, me quedé atascado en casos básicos pocas veces. Este tipo de pensamiento para dividir un problema en subproblemas es necesario, no solo para la recursividad, sino también para dividir y conquistar, programación dinámica y muchas más metodologías.

Le sugiero que practique la resolución de problemas utilizando la recursividad en lugar de elegir un enfoque iterativo para resolverlo.

Lea a continuación el artículo y practique problemas. A ver si ayuda.

Tutoriales de algoritmos

Buena suerte 🙂

Bueno, la recursión es un concepto muy difícil, pero resuelve problemas muy grandes en muy pocas líneas de código. Incluso se vuelve más difícil al resolver problemas de permutación. Dominar esta habilidad a veces puede llevar años, pero varía de persona a persona. Pero debo decir que no es imposible lograr el dominio en este dominio. La idea es resolver muchos problemas simples y asegurarse de que comprende cómo funciona en realidad. Por ejemplo, intenté resolver primero estos 26 problemas. Envíe su código y le dirá si resolvió correctamente o no.

https://codestepbystep.com/probl

Una vez que obtuve el concepto básico, ahora estoy tratando de resolver problemas un poco difíciles que implican permutaciones, subconjuntos de listas, problemas de combinaciones de las tareas de Stanford. Aquí va uno
https://see.stanford.edu/materia
https://see.stanford.edu/materia

Si desea ver video conferencias del curso CS106B de Stanford, cubren una gran cantidad de material relacionado con la recursión y el retroceso. Siga la unidad 5,6 conferencias

CS 106B: abstracciones de programación

Mi mantra es seguir resolviendo y pensando problemas hasta el día en que sientas que comienza a ser natural para ti.
Espero que ayude y si necesita ayuda en este sentido, no dude en hacer cualquier pregunta.

PD: Tengo muchos conjuntos de problemas de Stanford CS106B de diferentes años que requieren un enfoque recursivo de los problemas. Avíseme si está interesado y lo agregaré a las respuestas.