Sí, el código no funciona bien...
Para n=4, esta es la salida:
Using text Syntax Highlighting
Introduzca longitud: 4
t=AAAA
t=TTTT
AAAA CACC GAGG TATT
ACAA CCCC GCGG TCTT
AGAA CGCC GGGG TGTT
ATAA CTCC GTGG TTTT
ATAA CTAC GTAG TTAT
ATCA CTCC GTCG TTCT
ATGA CTGC GTGG TTGT
ATTA CTTC GTTG TTTT
ATTA CTTA GTTA TTTA
ATTC CTTC GTTC TTTC
ATTG CTTG GTTG TTTG
ATTT CTTT GTTT TTTT
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Observa la primera columna: a partir del momento en que se coloca una 'T' en la segunda posición, permanece así para el resto de combinaciones. Y hay combinaciones que se repiten (como 'ATAA') y otras muchas que faltan (como 'ACCC'). El número de combinaciones debería ser 4^4 = 256.
No es tan simple como hacer un bucle que meta cuatro letras a las combinaciones que ya tenemos. Hay que hacer una nueva lista de combinaciones por cada combinación de la letra precedente.
Una forma obvia es la que se comenta en uno de los enlaces: hacer tantos bucles anidados como sea 'n'. O de forma recursiva (una función que se llame a sí misma).
Esta es la forma cómoda de hacerlo (para n=4):
Using perl Syntax Highlighting
#!/usr/bin/perl
use 5.010;
use Algorithm::Combinatorics 'variations_with_repetition';
my @x = variations_with_repetition([qw(A T C G)], 4);
for my $x (@x) { # cada elemento del array es una ref. a otro array, que contiene los elementos por separado
say @$x; # desreferenciamos y sacamos el array. El say(), por defecto, sacará los elementos unidos
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4