Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Ejercicios: Recursividad y Divide y Vencerás

Universidad Nacional de Río Negro

Ejercicios de Recursividad y Divide y Vencerás

Acerca de

Estos ejercicios tienen como propósito dominar la recursividad de control y el paradigma de diseño “Divide y Vencerás” en C.

Capítulos de Apunte Correspondientes

Cuestiones de Estilo Aplicables


Fundamentos de Recursividad

Ejercicio 29.1 - Factorial ⭐⭐☆☆☆

Implementar la función factorial de forma recursiva siguiendo la definición matemática.

long int factorial(int n);

Definición recursiva:

n!={1si n=0n×(n1)!si n>0n! = \begin{cases} 1 & \text{si } n = 0 \\ n \times (n-1)! & \text{si } n > 0 \end{cases}

Casos de prueba:

Ejercicio 29.2 - Suma de Enteros ⭐⭐☆☆☆

Implementar suma de dos enteros positivos usando solo recursividad (sin operador + en el paso recursivo).

int suma_recursiva(int a, int b);

Estrategia: Decrementar b e incrementar a hasta que b sea 0.

suma(a,b)={asi b=0suma(a+1,b1)si b>0suma(a, b) = \begin{cases} a & \text{si } b = 0 \\ suma(a + 1, b - 1) & \text{si } b > 0 \end{cases}

Ejercicio 29.3 - Producto por Sumas Recursivas ⭐⭐☆☆☆

Implementar multiplicación usando solo sumas recursivas.

int producto_recursivo(int a, int b);
a×b={0si b=0a+producto(a,b1)si b>0a \times b = \begin{cases} 0 & \text{si } b = 0 \\ a + producto(a, b - 1) & \text{si } b > 0 \end{cases}

Complejidad: O(b)O(b) en tiempo.

Ejercicio 29.4 - Potencia ⭐⭐☆☆☆

Implementar baseexponentebase^{exponente} de forma recursiva.

long int potencia(int base, int exponente);

Versión básica: O(n)O(n) en tiempo.

baseexp={1si exp=0base×potencia(base,exp1)si exp>0base^{exp} = \begin{cases} 1 & \text{si } exp = 0 \\ base \times potencia(base, exp - 1) & \text{si } exp > 0 \end{cases}

Desafío: Implementar versión optimizada usando exponenciación rápida (divide y vencerás) con complejidad O(logn)O(\log n).

baseexp={1si exp=0(baseexp/2)2si exp es parbase×(base(exp1)/2)2si exp es imparbase^{exp} = \begin{cases} 1 & \text{si } exp = 0 \\ \left(base^{exp/2}\right)^2 & \text{si } exp \text{ es par} \\ base \times \left(base^{(exp-1)/2}\right)^2 & \text{si } exp \text{ es impar} \end{cases}

Series Numéricas Recursivas

Ejercicio 29.5 - Fibonacci Básico ⭐☆☆☆☆

Implementar la secuencia de Fibonacci recursivamente.

long int fibonacci(int n);

Ecuación de recurrencia:

F(n)={0si n=01si n=1F(n1)+F(n2)si n>1F(n) = \begin{cases} 0 & \text{si } n = 0 \\ 1 & \text{si } n = 1 \\ F(n-1) + F(n-2) & \text{si } n > 1 \end{cases}