Teoría

Antes de resolver los ejercicios recordemos en qué consiste un algoritmo recursivo.

Fragmento extraido de la Wikipedia: «Un algoritmo recursivo es un algoritmo que expresa la solución de un problema en términos de una llamada a sí mismo. La llamada a sí mismo se conoce como llamada recursiva o recurrente.

Generalmente, si la primera llamada al subprograma se plantea sobre un problema de tamaño u orden N, cada nueva ejecución recurrente del mismo se planteará sobre problemas, de igual naturaleza que el original, pero de un tamaño menor que N. De esta forma, al ir reduciendo progresivamente la complejidad del problema que resolver, llegará un momento en que su resolución sea más o menos trivial (o, al menos, suficientemente manejable como para resolverlo de forma no recursiva). En esa situación diremos que estamos. «

 

Ejercicios

 

Ejercicio 1

Escribir una función recursiva que sume todos los elementos desde el uno hasta el n. Dicho valor n será parámetro de entrada.

private static int sumaRecursiva(int n) {
 int r = 0;
 if (n == 1) { //Caso base
  r = 1;
 } else if (n > 1) {
  r = n + sumaRecursiva(n - 1);
 }
 return r;
}

Ejercicio 2

Escribir una función recursiva que devuelva el menor valor de un array.

static int minRec(int[] v, int n) {
   int m = -1;
   if (n == 0) { //Caso base
    m = v[0];
   } else if (n > 0) {
    int aux = minRec(v, n - 1);
    if (v[n] < aux) {
     m = v[n];
    } else {
     m = aux;
    }
   }

   return m;
}

 

Ejercicio 3

Escribir una función recursiva que sume todos los elementos de un vector.

static int sumaVectorRec(int[] v, int n) {
 int res = 0;
 if (n == -1) {
  res = 0;
 } else if (n >= 0) {
  res = v[n] + sumaVectorRec(v, n - 1);
 }
 return res;
}

Ejercicio 4

Escribir una función recursiva que diga si un vector de enteros es o no capicúa (Ejemplo de números capicúos: 2992, 14641,…) .

static boolean funcionRecCapicua(int[] v, int inicio, int fin) {
 boolean cap = true;
 if (inicio <= fin) {
  if (v[inicio] == v[fin]) {
   cap = funcionRecCapicua(v, inicio + 1, fin - 1);
  } else {
   cap = false;
  }
 }
 return cap;
}

 

Ejercicio 5

Escribir una función recursiva que transforme un número entero positivo a notación binaria.

public static int decBinRec(int n) {
 int r = 0;
 if (n < 2) {
  r = n;
 } else {
  r = n % 2 + (10 * decBinRec(n / 2));
 }
 return r;
}

 

Ejercicio 6

Escribir una función recursiva que transforme un número expresado en notación binaria a un número entero.

public static int BinDecRec(int n, int cont) {
 int d = 0;
 if (n == 0) {
  d = 0;
 } else {
  d = (int)(d + n % 10 * Math.pow(2, cont)) + BinDecRec(n / 10, cont + 1);
 }
 return d;
}

 

Ejercicio 7

Escribir una función recursiva que invierta los números de un arreglo de enteros.

public static void invertirVectorRec(int[] v, int inicio, int fin) {
 int aux;
 if (inicio >= fin) {} else {
  aux = v[inicio];
  v[inicio] = v[fin];
  v[fin] = aux;
  invertirVectorRec(v, inicio + 1, fin - 1);
 }
}

 

Espero que os sirva de ayuda 😀