¿Qué es la recursividad? ¿Puedes explicar los principios fundamentales de las recursiones? ¿Puedes hacer el código / algoritmo de la serie Fibonacci usando recursividad?

La recursión es el proceso (más precisamente en informática) por el cual una función se llama a sí misma.

Para usar la técnica de recursión, dividimos un problema mayor en sus subproblemas similares más pequeños y luego los llamamos recursivamente.

En cualquier función recursiva, el problema se resuelve dividiéndolo en dos componentes: el caso base y el caso recursivo.

El caso base brinda la solución directa del problema que conocemos. Da las condiciones en que las llamadas recursivas se detendrán.

El caso recursivo simplifica un problema mayor en una serie de subproblemas más simples y luego los llama.

Todas las iteraciones se pueden cambiar a recursiones y viceversa.

Un programa recursivo simple

// esta función calcula el factorial de un número positivo de forma recursiva
int factorial (int n)
{
if (n == 1) devuelve 1; // caso base, como sabemos que el factorial de 1 es 1
de lo contrario, devuelve n * factorial (n-1); // caso recursivo
}

Tratemos ahora de resolver el problema de la serie de Fibonacci.

Sabemos que en una serie de Fibonacci, cualquier término es igual a la suma de los dos términos anteriores.

Por lo tanto, [matemática] T_n = T_ (n-1) + T_ (n-2) [/ matemática] donde [matemática] T_n, T_ (n-1) [/ matemática] y [matemática] T_ (n-2) [/ math] son ​​[math] nth [/ math] term, [math] (n-1) th [/ math] term y [math] (n-2) th [/ math] términos respectivamente.

También sabemos que los términos primero y segundo de la serie son 0 y 1 respectivamente.

Por lo tanto, [matemática] T_1 = 0 [/ matemática] y [matemática] T_2 = 1 [/ matemática]

Escribamos ahora la función para calcular el enésimo término de una serie de Fibonacci de forma recursiva.

int fibonacci (int n)
{
if (n <1) devuelve -1; //error
/ * Las siguientes dos líneas son los casos base * /
if (n == 1) devuelve 0; // primer término de la serie fibonacci
if (n == 2) devuelve 1; // segundo término de la serie fibonacci
/ * La siguiente línea es el caso recursivo * /
retorno fibonacci (n-1) + fibonacci (n-2);
}

Usando la función anterior, podemos generar la serie de Fibonacci. Para imprimir la serie de Fibonacci de forma recursiva, implemente el siguiente algoritmo.

nulo printFibonacciSeries (int n)
{
if (n> = 1) printFibonacciSeries (n-1);
impresión (fibonacci (n));
}

La recursión es una técnica matemática para definir el valor de una función para un determinado valor en términos de los valores de esa función para valores “más pequeños”. Siempre debe haber una cláusula de terminación, es decir, el valor de la función en algo que es “mínimo”.

Otra forma de decir esto es que uno divide un problema en subproblemas más pequeños. Por lo tanto, puede tener algoritmos recursivos para árboles binarios. Estos definirán el valor de la función en función de sus valores en los subárboles izquierdo y derecho. La condición de terminación define el valor en los nodos hoja (los que no tienen ramas.

Ejemplos:

  • Suponga que para los números naturales solo sabemos cómo sumar y restar, no multiplicar. Entonces la multiplicación se puede definir como
    1. [matemáticas] a \ veces 0 = 0 [/ matemáticas]
    2. [matemáticas] a \ veces 1 = 1 [/ matemáticas]
    3. [matemáticas] a \ veces b = a + a \ veces (b-1) [/ matemáticas]
    • La función de Fibonacci se define como
      1. [matemáticas] fib (0) = 0 [/ matemáticas]
      2. [matemáticas] fib (1) = 1 [/ matemáticas]
      3. [matemáticas] fib (n) = fib (n-2) + fib (n-1) [/ matemáticas]
      • [matemática] M [/ matemática] los matemáticos podrían escribir eso como
        F [matemáticas] _0 = 0, F_1 ​​= 1, F_n = F_ {n-2} + F_ {n-1}. [/ Matemáticas]
      • ¿Cómo podemos determinar cuántos nodos hay en un árbol binario?
        1. [math] count (T) = 1 \ \ [/ math] if [math] T [/ math] es una hoja
        2. [matemática] cuenta (T) = 1 + cuenta (izquierda (T)) + cuenta (derecha (T)) [/ matemáticas]
        • Tenga en cuenta que al soltar [math] 1 + [/ math] podemos convertir lo anterior en la función que cuenta solo los nodos hoja.

        Entonces, podría codificar la función Fibonacci como (por ejemplo, en JavaScript):

        función F (n) {
        if (n <0) devuelve nulo; // No está definido para números negativos
        si no (n <= 1) devuelve n;
        de lo contrario, devuelve F (n-2) + F (n-1);
        }

        Aquí hay una buena explicación:

        ¿Qué es la recursividad? ¿Puedes explicar los principios fundamentales de las recursiones? ¿Puedes hacer el código / algoritmo de la serie Fibonacci usando recursividad?

        More Interesting

        Cómo hacer una matriz de entradas de usuario en JavaScript

        ¿Es posible codificar un algoritmo de manera que cuando se proporciona una imagen de entrada y la ropa que una persona usa en la imagen se recorta y compara con una imagen en una base de datos y sale con la coincidencia exacta / coincidencia más cercana?

        ¿Cómo podría seleccionar aleatoriamente los bordes en un gráfico para conectar cada nodo [C]?

        ¿Qué son los patrones de búsqueda?

        ¿Cómo debo explicar Hashing a un niño de 4 años?

        ¿Es este código de búsqueda binario válido? Si es así, ¿entonces cómo?

        Cómo elegir el mejor algoritmo de aprendizaje profundo o paquete R para un conjunto de datos

        ¿Cuáles son los algoritmos de clasificación considerados algoritmos codiciosos?

        Cómo encontrar la tasa de ganancia más efectiva con la menor cantidad de coincidencias posible (algoritmo)

        ¿Qué tipo de algoritmo de programación de CPU se utiliza actualmente en los sistemas operativos?

        ¿Cómo puedo calcular de manera eficiente el número de intercambios requeridos por los métodos de ordenación lenta como la ordenación por inserción y la ordenación por burbujas para ordenar una matriz determinada?

        Gráfico distribuido: ¿Cuál es la forma más efectiva de distribuir los nodos de un gráfico en diferentes servidores en un sistema distribuido?

        ¿Qué es la representación de colas usando array?

        ¿Dónde puedo estudiar bien los algoritmos y las estructuras de datos?

        ¿Qué deben leer todos los libros como Embedded / System / Kernel Engineer y por qué? ¿Incluyendo estructura de datos y algoritmos?