Você está na página 1de 9

Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un nmero.

Solucin: Cdigo

int factorial(int n){ if(n==0) return 1; //AXIOMA else return n*factorial(n-1);

//FORMULA RECURSIVA

Ejercicio 2. Programar un algoritmo recursivo que calcule un nmero de la serie fibonacci. Solucin: Cdigo

int fibonaci(int n){ if(n==1 || n==2) return 1; else return fibonaci(n-1)+fibonaci(n-2); }

Planteamiento: Ejercicio 3. Programar un algoritmo recursivo que permita hacer la divisin por restas sucesivas. Solucin: Cdigo

int division (int a, int b) { if(b > a) return 0; else return division(a-b, b) + 1; }

Planteamiento: Ejercicio 4. Programar un algoritmo recursivo que permita invertir un nmero. Ejemplo: Entrada: 123 Salida: 321 Solucin: Cdigo

int invertir (int n) if (n < 10) //caso base return n; else return (n % 10) + invertir (n / 10) * 10;

Planteamiento: Ejercicio 5. Programar un algoritmo recursivo que permita sumar los dgitos de un nmero. Ejemplo: Entrada: 123 Resultado:6 Solucin: Cdigo

int sumar_dig (int n) { if (n == 0) //caso base return n; else return sumar_dig (n / 10) + (n % 10); }

Planteamiento: Ejercicio 6. Programar un algoritmo recursivo que permita hacer una multiplicacin, utilizando el mtodo Ruso. Solucin: Cdigo

int mult_rusa(int A, int B) if(A==1){ return (B); } if(A%2!=0){ return(B+mult_rusa( A/2 , B*2)); } else{ return(mult_rusa( A/2 , B*2)); }

Planteamiento: Ejercicio 7. Programar un algoritmo recursivo que permita sumar los elementos de un vector. Solucin: Cdigo

int suma_vec(int v [], int n) if (n == 0) return v [n]; else return suma_vec(v, n - 1) + v [n];

Planteamiento: Ejercicio 8. Programar un algoritmo recursivo que permita multiplicar los elementos de un vector. Solucin: Cdigo

int multiplicar (int vec [], int tam) { if (tam == 0) return (vec [0]); return (vec [tam] * multiplicar (vec, tam - 1)); }

Planteamiento: Ejercicio 9. Programar un algoritmo recursivo que calcule el Maximo comun divisor de dos nmeros. Solucin: Cdigo

int sacar_mcd(int a, int b) { if(b==0) return a; else return sacar_mcd(b, a % b); }

Planteamiento: Ejercicio 10. Programar un algoritmo recursivo que determine si un nmero es positivo. Solucin: Cdigo

public boolean positivo(int n){ if(n>0) return true; else return negativo(n); } public boolean negativo(int n){ if(n<0) return false; else return positivo(n); }

Planteamiento: Ejercicio 11. Programar un algoritmo recursivo que determine si un nmero es impar utilizando

recursividad cruzada. Solucin: Cdigo

public boolean par(int n){ if(n==0) return true; else return impar(n-1); } public boolean impar(int n){ if(n==0) return false; else return par(n-1); }

Planteamiento: Ejercicio 12. Programar un algoritmo recursivo que permita sumar los elementos de una matriz. Solucin: Cdigo

int suma (int fila, int col, int orden, int mat [] []) if (fila == 0 && col == 0) return mat [0] [0]; else if (col < 0) return suma (fila - 1, orden, orden, mat); else return mat [fila] [col] + suma (fila, col - 1, orden,

mat); }

Planteamiento: Ejercicio 16. Programar un algoritmo recursivo que muestre el numero menor de un vector. Solucin: Cdigo

int menorvec (int x [], int n, int menor) { if (n == 0) if (menor > x [n]) return x [0]; else return menor; else if (menor > x [n]) return menorvec (x, n - 1, x [n]); else return menorvec (x, n - 1, menor); }

Ejercicio 17. Programar un algoritmo recursivo que muestre el numero mayor de un vector. Solucin: Cdigo

int mayor (int numeros [], int posicion) { int aux; if (posicion == 0) return numeros [posicion]; else { aux = mayor (numeros, posicion - 1); if (numeros [posicion] > aux) return numeros [posicion]; else return mayor (numeros, posicion - 1); } }

1. Calcular la potencia de x elevado a la n en forma recursiva. x real y n entero positivo.

import java.util.Scanner; class Ejercicio{ public static double potencia(double x, double n) { if(n==0) return 1; else return x*potencia(x,n-1); } public static void main(String args[]) { Scanner in = new Scanner(System.in); int n; double x; System.out.print("Valor de x :"); x= in.nextDouble(); do{ System.out.print("valor de n : "); n=in.nextInt(); }while(n<=0); System.out.println(x+" elevado a la "+n+ " es igual a "+potencia(x,n)); } }

Ejercicio 13. Programar un algoritmo recursivo que permita resolver el cuadro latino. Ejemplo de cuadro latino: 0 0 0 0 1 0 0 0 1 2 0 0 1 2 3 0 1 2 3 4 1 2 3 4 5

Solucin: Cdigo

latino (int fila, int col, int cont, int orden, int mat [] []) if (fila == 0 && col == 0) mat [0] [0] = 1; else if (fila == col) latino (fila - 1, orden - 1, orden, orden, mat); else { mat [fila] [col] = cont; latino (fila, col - 1, orden + 1, orden, mat); }

//este metodo recibe la matriz, la recorre y va sumando todos sus valores //precondicion i=0; //precondicion j=0; //precondicion resultado =0; // public static int sumarMatriz(int matriz[][], int i, int j, int resultado){ } resultado=resultado+matriz[i][j]; j++; if(j>=matriz[0].length){ i=i+1; j=0; } return sumarMatriz(matriz, i,j,resultado); }

//este metodo recibe la matriz, la recorre y va sumando solo los valores impares //precondicion i=0; //precondicion j=0; //precondicion resultado=0; // public static int sumarMatrizImpares(int matriz[][], int i, int j, int resultado){ if(i>=matriz.length){ return resultado; } if(matriz[i][j]%2!=0){ resultado=resultado+matriz[i][j]; } j++; if(j>=matriz[0].length){ i=i+1; j=0; } return sumarMatrizImpares(matriz, i,j,resultado); }

//este metodo recibe la matriz, la recorre y va sumando solo los valores pares //precondicion i=0; //precondicion j=0; //precondicion resultado =0; // public static int sumarMatrizPares(int matriz[][], int i, int j, int resultado){ if(i>=matriz.length){ return resultado; } if(matriz[i][j]%2==0){ resultado=resultado+matriz[i][j]; } j++; if(j>=matriz[0].length){ i=i+1; j=0; } return sumarMatrizPares(matriz, i,j,resultado);

//este metodo recibe la matriz, las posicion (i,j) //y retorna la cantidad de elemntos que hay en la diagonal de (i,j) // public static int cantidadDeElemntosDiagonal(int matriz[][], int i, int j, int resultado){ if(i>=matriz.length||j>=matriz[0].length){ return resultado; } resultado++; j++; i++; return cantidadDeElemntosDiagonal(matriz, i,j,resultado); }

//este metodo recibe un matriz y el indice por donde esta evaluando 119 //y retorna el vector ordenado ascendentemente public static int[][] ordenarMatriz(int matriz[][], int i,int j){ int i_sig=0; int j_sig=0; if(i==matriz.length-1 && j==matriz[0].length-1){ return matriz; } if(j==matriz[0].length-1){ i_sig=1+i; j_sig=0; }else{ i_sig=i; j_sig=j+1; } if(matriz[i][j]>matriz[i_sig][j_sig]){ Int aux=matriz[i][j]; matriz[i][j]=matriz[i_sig][j_sig]; matriz[i_sig][j_sig]=aux; return ordenarMatriz(matriz, 0,0); }else{ return ordenarMatriz(matriz, i_sig,j_sig);

} }

//este metodo recibe un vector y el indice por donde esta evaluando 147 //y retorna el vector ordenado ascendentemente // public static int[] ordenarVectorAscendente(int vector[], int i){ if(i>=vector.length-1){ return vector; } if(vector[i]>vector[i+1] ){ int aux=vector[i]; vector[i]=vector[i+1]; vector[i+1]=aux; return ordenarVectorAscendente(vector, 0); }else{ return ordenarVectorAscendente(vector, i+1); } }

Você também pode gostar