Java calcula recursivamente el número en la posición especificada de la secuencia de Fibonacci
1. Principio
La secuencia de Fibonacci (secuencia de Fibonacci), también conocida como secuencia de la sección áurea, fue introducida por el matemático Leonardo Fibonacci (Leonardo Fibonacci) utilizando como ejemplo la cría de conejos, por lo que también se la llama "secuencia del conejo".1、1、2、3、5、8、13、21、34……
Matemáticamente, esta secuencia se define mediante el siguiente método recursivo: F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
.
2. Implementación del código
Para calcular n
el número de la serie de Fibonacci, podemos utilizar la siguiente función recursiva:
public class MyClass {
public static void main(String[] args){
int n = 10;
System.out.println("斐波那契数列第 " + n + " 个数为 " + Fibonacci(n));
}
//递归 n代表第几个数
public static int Fibonacci(int n) {
//前两个数为 1
//第三个数及后面的数为前面两数之和
//如果输入的 n 不合法将返回 -1
if (n == 1 || n == 2) {
return 1;
} else if (n > 2) {
return Fibonacci(n - 1) + Fibonacci(n - 2);
} else {
return -1;
}
}
}
complejidad del tiempo:
- En el mejor de los casos, cuando
n
es igual a1
o2
, regresa directamente1
y la complejidad del tiempo esO(1)
. - En el peor de los casos, cuando
n
es mayor que2
, es necesario llamar a la función de forma recursivaFibonacci()
para calcular la suma de los dos primeros números, y la complejidad del tiempo esO(2^n)
. Debido a que cada llamada recursiva produce dos subproblemas, cada subproblema produce dos subproblemas más pequeños, y así sucesivamente, hasta que la recursividad llega an
igual a1
o2
. - En promedio, también lo es la complejidad del tiempo
O(2^n)
, ya que cada número debe calcularse mediante llamadas recursivas.
Complejidad espacial:
- Dado que las llamadas recursivas guardan las variables locales y las direcciones de retorno de cada llamada en la pila, la complejidad del espacio depende de la profundidad de la recursividad. En el peor de los casos, la profundidad de recursividad es
n
, por lo que la complejidad del espacio esO(n)
.
En resumen, la complejidad temporal de la función de secuencia de Fibonacci implementada recursivamente es exponencial O(2^n)
y la complejidad espacial es lineal O(n)
. Debido a la complejidad exponencial del tiempo, la implementación recursiva se vuelve muy lenta cuando se calculan números de Fibonacci más grandes.
3. Resultados de ejecución
斐波那契数列第 10 个数为 55