Ver Mensaje Individual
  #57 (permalink)  
Antiguo 01/12/2014, 20:16
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: Petando la pila. Problemas y retos usando recursividad.

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,
Gracias por comprobarlo. Es correcto, en el resultado no aparecer ese valor, al parecer mi problema está en que me estoy basando en la fórmula incorrecta, la cantidad de resultados no es el 6!, no estoy generando todas las posibles permutaciones o combinaciones reales. Lo voy a revisar de nuevo y optimizar un poco.
Saludos,
En realidad no se trata de permutaciones sino de variaciones.

Me explico. Si tienes el número "123456" los dos números que multiplicados darían ese número, con los mismos dígitos, se corresponden con las variaciones tomadas de tres en tres de esos seis dígitos. Y eso da 6^3 = 216 en lugar de 6! = 720. Fíjate que si usas este último caso estarías repitiendo operaciones ya que entre las permutaciones te saldrían: 123 345 y la 345 123 y así sucesivamente, con lo que estarías tomando de más. No está mal pero es menos eficiente porque repites operaciones. En el primer código que usé tomé variaciones y aún así, si se repiten dígitos, se te suela algún que otro caso repetido.

En el segundo fíjate que he hecho uso de los dígitos que aparecen en el número y los que aparecen en los dos factores, cosa que llevo a cabo en la función "DigitosNumero". En ella pongo en un array a "1" los dígitos que aparecen en el número y luego voy restando los que corresponden a los dos factores. Si no hay valores negativos en el array es que se corresponden los multiconjuntos de dígitos del número y el de los factores.

Y respecto al otro tema que abrió eferion opino, y es tan solo una opinión, que tampoco hay que llegar a los extremos de comparar exhaustivamente los códigos propuestos. Soy de la opinión de que "nos ven" muchos usuarios que beben de nuestros conocimientos y el llevar los códigos a la extrema eficiencia nos llevaría a "códigos ofuscados" para la gran mayoría debido al uso, entre otras cosas, que haríamos de operadores a nivel de bits, parte de códigos en ensamblador y otras cosas similares. Por eso me he propuesto usar nombres de variables y funciones que expliciten lo que representen o hagan. Además hay códigos que a lo mejor no son tan eficientes pero si la mar de ingeniosos y eso también cuenta.

Yo lo que le propondría a Pantaláimon que alterne Retos de recursividad con otros de mayor libertad. Creo que eso mantendría más activo el tema y se apuntarían más usuarios que en este caso no tienen conocimientos y/o practica suficiente del tema de recursividad y no pueden intervenir. En cambio si se alternan con otros que no sean estrictamente de recursividad seguro que se apuntarían, lo que redundaría en una mayor actividad participativa en el tema.

Como ejemplo, echo de menos la intervención de personas como eferion y amchacon, entre otros, en el último reto. Así que amigo Pantaláimon abre el espectro de problemas, tampoco te vamos a exigir que los supervises, para eso ya estamos los demás usuarios. Tu podrías ser el moderador/supervisor de lo que se vaya proponiendo. aunque tampoco niego el que algún usuario proponga Retos interesantes. amchacon lo intentó pero a mí lo de las listas y árboles como que no, pero otros temas podrían ser interesantes.

Yo tengo en cartera algunos Retos que podrían ser más que interesantes si Pantaláimon lo admite. Hasta entonces me reservo, no quiero fastidiarle su tema.

Un fuerte saludo a todos y muy contento por las nuevas incorporaciones, así todos vamos aprendiendo, yo al menos sí.

¡¡¡Saluditos!!!