Debería usar la recursividad, pero tal vez no en la forma en que la implementó, que dijo que tomó demasiado tiempo.
Lo importante para aprender a través de estos problemas es qué variables usar para describir el problema: no muy pocas ni demasiadas. Visto de manera más abstracta, está eligiendo una estructura de datos, solo que aquí la estructura de datos es realmente muy simple: un conjunto de variables, o matrices, para contener los recuentos del número de secuencias apropiadas.
Podría comenzar con un modelo ingenuo que simplemente tiene [math] w_n [/ math] como el número de palabras legales de longitud [math] n [/ math]. Esto es directamente lo que se le pide que calcule, por lo que es una idea atractiva. El problema es que no hay una forma aparente de determinar [matemáticas] w_ {n + 1} [/ matemáticas] a partir de [matemáticas] w_n [/ matemáticas] o incluso todas las [matemáticas] w_i [/ matemáticas] anteriores.
- ¿Por qué diferenciamos entre máquinas Turing universales y máquinas Turing normales?
- ¿Hay algún fractal completo de Turing?
- ¿Cómo puede aprovechar al máximo una prueba de Mathematica 9?
- Cómo desarrollar un juego y cuánto conocimiento matemático se necesita para desarrollar los gráficos en el juego.
- ¿Cuál es la diferencia entre teoría de la computación y algoritmo?
La razón es esta: si simplemente le dijera que hay [matemáticas] 23,734 [/ matemáticas] palabras legales de longitud [matemáticas] 10 [/ matemáticas], y luego le pregunto cuántas palabras legales hay de longitud [matemáticas] 11 [/ math], naturalmente trataría de ver qué letras se pueden agregar al final de cada palabra de [10] [- math] para formar una palabra de letra [math] 11 [/ math]. Pero no lo sabes, ¿verdad? Algunas de esas palabras de letras [matemáticas] 10 [/ matemáticas] terminan en A, por lo que no puede poner una A o una E al final. Otras palabras terminan en C, por lo que puede poner cualquier cosa excepto una C. Pero el simple conteo total de palabras legales de longitud [matemáticas] 10 [/ matemáticas] no le dice cuántas de esas palabras terminan con una A o una B o lo que sea
Entonces necesita refinar su modelo. Un enfoque razonable es introducir cinco variables: el número de palabras legales que terminan en A, el número de aquellas que terminan en B, y así sucesivamente.
Esto realmente funcionará bien, pero es demasiado engorroso. Todo lo que realmente necesita son solo dos variables: Sea [math] c_n [/ math] sea el número de palabras legales de longitud [math] n [/ math] que terminan en una consonante, y sea [math] v_n [/ math] ser el número de tales palabras que terminan en vocal.
Ahora, prueba:
[matemáticas] v_ {n + 1} = 2c_n [/ matemáticas]
[matemáticas] c_ {n + 1} = 3v_n + 2c_n [/ matemáticas]
[matemáticas] v_1 = 2 [/ matemáticas]
[matemáticas] c_1 = 3 [/ matemáticas]
[matemáticas] w_n = v_n + c_n [/ matemáticas]
Desde aquí puede proceder de varias maneras, todas útiles para saber. Una es simplemente implementar una función que calcule [math] c_n [/ math] y [math] v_n [/ math] de forma recursiva. Otra es apegarse al lado matemático de las cosas y encontrar una fórmula más explícita, utilizando la diagonalización matricial o las funciones generadoras. Todos estos métodos funcionarían aquí.
EDITAR: el OP solicitó una fórmula explícita. Usando los métodos que sugerí, la fórmula se puede escribir de la siguiente manera:
[matemáticas] \ lambda_1 = 1 + \ sqrt {7} [/ matemáticas]
[matemáticas] \ lambda_2 = 1- \ sqrt {7} [/ matemáticas]
[matemáticas] a = \ frac {5} {2} + \ frac {13} {2 \ sqrt {7}} [/ matemáticas]
[matemáticas] b = \ frac {5} {2} – \ frac {13} {2 \ sqrt {7}} [/ matemáticas]
[matemáticas] w_n = a \ lambda_1 ^ n + b \ lambda_2 ^ n [/ matemáticas].