1. Pensando
El problema del conejo es una declaración figurativa de la serie Fischer, que es una pregunta planteada en sus obras de un matemático llamado Fibonacci.
2. Descripción
El problema con su técnica física es: si un bebé da a luz a un bebé cada mes, el bebé comienza a dar a luz a un bebé un mes después. Al principio solo había un bebé, y había dos bebés en un mes, tres bebés en dos meses y cinco bebés en tres meses (el pequeño bebé fue puesto en producción) ...
Lo expresamos de manera matemática, que es el siguiente conjunto de secuencias:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ......
Nota: ¡El bebé recién nacido tardará un mes en comenzar la producción! ¡Y estos conejos son inmortales! ! !
3. Reglas
Cuando estamos inexplicablemente expuestos a este problema, es difícil encontrar las reglas, pero ¿pensar en este problema de acuerdo con las leyes de secuencias en matemáticas y esperar la comparación? ¿Diferencia de avatar? ¿O algo más? Dado que esta es una pregunta planteada por los matemáticos, debería haber ciertas reglas matemáticas, ¿verdad? ¿Cuál es la regla? Si analiza cuidadosamente el conjunto de secuencias anteriores, ya tiene la respuesta. Así es, se expresa en una oración. A partir del tercer término, la suma de los dos primeros términos es igual al tercer término.
Suponiendo que el valor del enésimo término es FN, la regularidad de la secuencia se expresa de la siguiente manera utilizando fórmulas matemáticas:
4. Pseudocódigo
El llamado pseudo-código no es un código real. No se puede ejecutar en la máquina. Es solo un símbolo significativo entre el lenguaje natural y el lenguaje de programación que expresa la lógica del programa. Para el pseudocódigo del problema del conejo, utilizamos el método recursivo de la fórmula anterior aquí, y podemos tener el siguiente pseudocódigo:
Procedimiento fib (n) [if (n <0) imprimir ("error de entrada"); If (n = 0 o n = 1) return (n); Else return (fib (n-1) + fib (n-2)); ]Según el concepto de recursión descrito en el artículo anterior, puede consultar el "problema de Hanno" anterior para obtener más información. En comparación con todos, ya no estará demasiado familiarizado con la recursión. Luego, en base a las fórmulas matemáticas que obtuvimos anteriormente, deducir dicho pseudocodo de recursión será muy conciso y claro. Pero, um, es posible que lo hayas adivinado, quiero decirlo. ¿Ha encontrado un problema de que cuando nuestro valor n es demasiado grande, el programa será más lento?
Si se entera, significa que ha pensado en este problema en serio, y también debe resolver las dudas en su corazón. Si todavía no hay duda de que se resuelve, permítanme resolver las dudas de todos. ¿Por qué es más lento? La razón es que cuando calculamos el enésimo término, necesitamos calcular los términos N-1 y N-2 nuevamente, y ambos términos se han calculado antes. Cuando encontramos el siguiente número, todavía tenemos que calcularlo de lado. Invisiblemente, hemos hecho mucho trabajo inútil.
Entonces, ¿tenemos una buena manera de resolver este problema? Hay una respuesta. Según el análisis anterior, cuando resolvemos el enésimo término, se han resuelto los términos N-1 y N-2 anteriores. Entonces, ¿por qué no lo guardamos? ? ? ?
Jaja, ¿te diste de repente? ¡Sí! ¡Utilizamos el espacio para intercambiar tiempo aquí, lo que puede mejorar enormemente la eficiencia! No escribiré pseudocódigo aquí.
5. Código
Ok, lo he vendido todo, solo sube el código:
clase pública fibonacci {public static void main (string [] args) {int [] fib = new int [20]; fib [0] = 0; fib [1] = 1; para (int i = 2; i <fib.length; i ++) {fib [i] = fib [i-1]+fib [i-2]; } for (int i = 0; i <fib.length; i ++) {system.out.print (fib [i]+""); } System.out.println (); }}6. Pensamiento
Aquí, proponemos una pregunta de pensamiento. Si un conejo no da a luz a un conejo y múltiples conejos, ¿cómo debemos resolverlo? Por supuesto, lo que queremos decir con dar a luz a múltiples es un número fijo. Un conejo no dará a luz más y un conejo no dará a luz a menos, de lo contrario, será imposible resolverlo.
No hay código aquí. Puede encontrar los recursos apropiados en línea y ver cómo resolverlos.
Resumir
Lo anterior es todo el contenido de este artículo sobre el análisis del código del lenguaje Java para resolver problemas de conejo. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo.