Recursividad
Implementá una función recursiva que reciba un
double
z y un entero k y retorne:\(z + k\),
\(z \cdot k\) (sumas sucesivas), y
\(z ^ k\) (multiplicaciones sucesivas).
Implementá una función recursiva que retorne la cantidad de dígitos de un número entero.
Implementá una función recursiva que reciba un entero no negativo e imprima dicho número espejado.
Implementá una función recursiva que dados dos números \(n\) y math:
b
retorne si \(n\) es potencia de \(b\).Escribir una función recursiva que calcule el n-ésimo número triangular (el número triangular de \(n\) es \(1 + 2 + 3 + \ldots + n\)).
Escribir una función recursiva que encuentre el mayor elemento de un vector.
Escribir una función recursiva que dada una cadena determine si en la misma hay más letras A o letras E. (Sugerencia: Usar wrappers.)
Escribir una función recursiva que calcule el n-ésimo número de la sucesión de Fibonacci. La misma se define como \(F_n = F_{n-1} + F_{n-2}, F_0 = F_1 = 1\).
Dibuje un esquema (árbol de recursividad) de las llamadas recursivas para \(n = 5\).
Implementá una función recursiva que calcule el máximo común divisor (gcd) de 2 enteros \(x\) e \(y\). El gcd de los enteros \(x\) e \(y\) es el mayor entero que divide a ambos números con resto cero.
Resuelva primero por fuerza bruta: comience a probar números desde \(y\) en orden descendiente.
Una mejora es utilizar la siguiente definición recursiva: si \(y\) es igual a 0, entonces
gcd(x, y)
es \(x\); si nogcd(x, y)
esgcd(y, x % y)
.Un tercer algoritmo es:
si m y n son iguales: m es el gcd si m es mayor a n: el gcd(m, n) es gcd(m - n, n) si no: el gcd(m, n) es gcd(m, n - m)
El triángulo de Pascal es un arreglo triangular de números que se define de la siguiente manera: Las filas se enumeran desde \(n = 0\), de arriba hacia abajo. Los valores de cada fila se enumeran desde \(k = 0\) (de izquierda a derecha). Los valores que se encuentran en los bordes del triángulo son 1. Cualquier otro valor se calcula sumando los dos valores contiguos de la fila de arriba.
k=0 |
|||||||||||||
n=0 |
1 |
k=1 |
|||||||||||
n=1 |
1 |
1 |
k=2 |
||||||||||
n=2 |
1 |
2 |
1 |
k=3 |
|||||||||
n=3 |
1 |
3 |
3 |
1 |
k=4 |
||||||||
n=4 |
1 |
4 |
6 |
4 |
1 |
k=5 |
|||||||
n=5 |
1 |
5 |
10 |
10 |
5 |
1 |
|||||||
n=6 |
1 |
6 |
15 |
20 |
15 |
6 |
1 |
||||||
k=0 |
k=1 |
k=2 |
k=3 |
k=4 |
k=5 |
k=6 |
Escribir una función recursiva
int pascal(int n, int k)
que calcule el número correspondiente.Dibujar el árbol de recursividad para alguna llamada de interés.
Agregá en la matriz de la guía de TDA la primitiva
float matriz_determinante(const matriz_t *);
que dada una matriz calcule el determinante. El determinante sólo está definido para matrices cuadradas.El determinante de una matriz de \(1\times1\) es el valor de la única celda de la matriz.
Para una matriz de mayor tamaño el determinante se puede calcular por el método de los cofactores como \(|M| = \sum_{j=0}^{C-1} M_{0,j} (-1)^j |MM_{0,j}|,\) donde \(MM_{0,j}\) es la matriz menor ya implementada en el inciso k del ejercicio del TDA.