Anda di halaman 1dari 7

RECURSIVIDAD

IMPLEMENTAR LOS SIGUIENTES METODOS.

Planteamiento:

Ejercicio 2. Programar un algoritmo recursivo que calcule un número de la serie fibonacci.

Solución:

Código
intfibonaci(int n){
if(n==1|| n==2)return1;
elsereturnfibonaci(n-1)+fibonaci(n-2);
}

Planteamiento:

Ejercicio 3. Programar un algoritmo recursivo que permita hacer la división por restas
sucesivas.

Solución:

Código
int division (int a, int b)
{
if(b > a)return0;
else
return division(a-b, b)+1;
}

Planteamiento:

Ejercicio 4. Programar un algoritmo recursivo que permita invertir un número. Ejemplo:


Entrada: 123 Salida: 321

Solución:

Código
int invertir (int n)
{
if(n <10) //caso base
return n;
else
return(n %10)+ invertir (n /10)*10;
}

public int invertirNumero(int numero){


if(numero<10){
return numero;
}else{
int contador = 0;
int aux = numero;
while(aux/10!=0){
contador++;
aux = aux/10;
}
return (int)(Math.pow(10, contador))*(numero%10) +
this.invertirNumero(numero/10);
}
}

aki les mando el metodo invertir en forma recursiva


public int invertir(int n){
int res=0;
if(n<10){
res=n;
}
else{
res=(n % 10)*(int)Math.pow(10, cantDigitos(n)-1) + invertir(n / 10);
}
return res;
}

Planteamiento:

Ejercicio 5. Programar un algoritmo recursivo que permita sumar los dígitos de un


número. Ejemplo: Entrada: 123 Resultado:6

Solución:

Código
intsumar_dig(int n)
{
if(n ==0) //caso base
return n;
else
returnsumar_dig(n /10)+(n %10);
}

Planteamiento:

Ejercicio 6. Programar un algoritmo recursivo que permita hacer una multiplicación, utilizando
el método Ruso. Para masinformacion: aqui.

Solución:

Código
intmult_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.

Solución:

Código
intsuma_vec(int v [], int n)
{
if(n ==0)
return v [n];
else
returnsuma_vec(v, n -1)+ v [n];
}

Planteamiento:

Ejercicio 8. Programar un algoritmo recursivo que permita multiplicar los elementos de un


vector.

Solución:

Código
int multiplicar (intvec[], inttam)
{
if(tam==0)
return(vec[0]);
return(vec[tam]* multiplicar (vec, tam-1));
}

Planteamiento:

Ejercicio 9. Programar un algoritmo recursivo que calcule el Maximocomun divisor de dos


números.

Solución:

Código
intsacar_mcd(int a, int b){
if(b==0)
return a;
else
returnsacar_mcd(b, a % b);
}

Planteamiento:

Ejercicio 10. Programar un algoritmo recursivo que determine si un número es positivo.

Solución:

Código
publicbooleanpositivo(int n){
if(n>0)returntrue;
elsereturnnegativo(n);
}

publicbooleannegativo(int n){
if(n<0)returnfalse;
elsereturn positivo(n);
}

Planteamiento:

Ejercicio 11. Programar un algoritmo recursivo que determine si un número es impar utilizando
recursividad cruzada.

Solución:

Código
publicboolean par(int n){
if(n==0)returntrue;
elsereturnimpar(n-1);
}

publicbooleanimpar(int n){
if(n==0)returnfalse;
elsereturn par(n-1);
}

Planteamiento:

Ejercicio 12. Programar un algoritmo recursivo que permita sumar los elementos de una
matriz.

Solución:

Código
intsuma(intfila, int col, intorden, int mat [][])
{
if(fila==0&& col ==0)
return mat [0][0];
else
if(col <0)
returnsuma(fila-1, orden, orden, mat);
else
return mat [fila][col]+suma(fila, col -1, orden, mat);
}

Planteamiento:

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

Solución:

Código
latino(int fila, int col, intcont, int orden, intmat[][])
{
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);
}
}

Planteamiento:

Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matriz:

1 1 1 1 1
1 2 2 2 2
1 2 4 4 4
1 2 4 8 8
1 2 4 8 16
public class MatrizRecursividad {

private static int a=0, aux=1, b=0; //Declaramos los datos necesarios
private static int[][] matriz = new int[6][6]; //La matriz debe ser
cuadrada

public static void main(String[] args) {

llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo


imprimir(); //imprimimos la matriz

public static void llenarMatriz(int matriz[][], int i, int j){

if(j > matriz.length -1){ //Si llegó a la ultima coluna,


reseteamos los datos para la siguiente
i++;
j=0;
aux++;
}
if(i <matriz.length){ // compara que no hallamos llegado al
final

if(i==(aux-1) && j >= (aux-1)){ //comprueba que


estemos en el lugar adecuado, es decir ira imprimiento escaladamente
if(i==0)// si es la primera fila ingresamos
aux=1
matriz[i][j] = aux;
else
matriz[i][j] = matriz[i][i-
1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2
llenarMatriz(matriz, i , j+1);
}
else{ //si no, asignamos los valores anteriores de la
escala
if(j==0)// comprobamos si es el primer digito
a ingresar
matriz[i][j] = j+1;
else
matriz[i][j] = matriz[i-1][j];//
asignamos el mismo numero de la fila anterior (i-1)
llenarMatriz(matriz, i, j+1);
}
}
}

public static void imprimir(){ //este metodo nos imprime la matriz


por consola

for(int i=0; i< matriz.length; i++){


for(int j=0; j< matriz.length; j++){
System.out.print(matriz[i][j] + " ");
}
System.out.print("\n");
}
}

Anda mungkin juga menyukai