Ver Mensaje Individual
  #10 (permalink)  
Antiguo 13/02/2015, 08:12
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: combinatorias

Se *tiene* que hacer con recursividad.Las soluciones anteriores que usan ciclos...
A ver, sea como sea que quieras hacerlo, con importancia del orden, sin importancia del orden, con repeticion, sin repetición, todo se reduce a:
1) Tienes ya una parte de la solución : (inicialmente, está vacía)
2) Tienes una serie de elementos que puedes añadir a la solución actual (dependiendo del orden/repeticion,etc) : inicialmente, todos los elementos.

La función recursiva es:
1) Si la solución actual tiene la longitud deseada, devolverla.
2) Por cada uno de los elementos que podemos usar para generar nuevas soluciones:
-2.1 crear una nueva solución como la actual + elemento.
-2.2 determinar cuales, de la lista de elementos, son válidos para añadir a nuevas soluciones.
-2.3 llamar recursivamente, con la solucion de 2.1, y la lista de 2.2
Código PHP:
Ver original
  1. Secuencia para [a,b,c,d] :
  2. LLamada inicial: [],[a,b,c,d]
  3. (Bucle)
  4.      2.1 : [a]
  5.      2.2   [b,c,d]
  6.      2.3  LLamada recursiva [a],[b,c,d]
  7.              2.1 [a,b]
  8.              2.2 [c,d]
  9.              2.3 LLamada recursiva [a,b],[c,d]
  10.                    <retorno: longitud=2>
  11.              2.1 [a,c]
  12.              2.2 [d]
  13.              2.3 LLamada recursiva [a,c],[d]
  14.                    <retorno: longitud = 2 >
  15.              2.1 [a,d]
  16.              2.2 []....
  17.      2.1 [b]
  18.      2.2 [c,d]
  19.      2.3 LLamada recursiva [b],[c,d]
  20.            .....
  21.       2.1 [c]
  22.       2.2 [d]
  23.       2.3 LLamada recursiva [c],[d]
  24.      ....
Obviamente, la comprobación de la longitud de la solución se puede hacer antes de llamar a la función recursiva, pero es menos "purista"