Post on 28-Feb-2018
7/25/2019 Ejercicios-recursividad
1/14
Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un nmero.
Solucin:
Cdigo
1. intfactorial(intn){
2. if(n==0)return1; //AXIOMA
3. elsereturnn*factorial(n-1); //FORMULA RECURSIVA
4. }
Planteamiento:
Ejercicio 2. Programar un algoritmo recursivo que calcule un nmero de la serie fibonacci.
Solucin:
Cdigo
1. intfibonaci(intn){
2. if(n==1||n==2)return1;
3. elsereturnfibonaci(n-1)+fibonaci(n-2);
4. }
Planteamiento:
Ejercicio 3. Programar un algoritmo recursivo que permita hacer la divisin por restassucesivas.
Solucin:
Cdigo
1. intdivision (inta, intb)
2. {
3. if(b a)return0;
7/25/2019 Ejercicios-recursividad
2/14
4. else
!. returndivision(a-b, b)+1;
". }
#.
Planteamiento:
Ejercicio 4. Programar un algoritmo recursivo que permita invertir un nmero. Ejemplo:Entrada: 123 Salida: 321
Solucin:
Cdigo
1. intinv$rtir (intn)
2. {
3. if(n %10) //caso base
4. returnn;
!. else
". return(n &10)+inv$rtir (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
1. intsardi (intn)
2. {
7/25/2019 Ejercicios-recursividad
3/14
3. if(n ==0) //caso base
4. returnn;
!. else
". returnsardi (n '10)+(n &10);
#. }
Planteamiento:
Ejercicio 6. Programar un algoritmo recursivo que permita hacer una multiplicacin utili!andoel m"todo Ruso. Para mas informacion: aqui.
Solucin:
Cdigo
1. intltrsa(int, int)
2. {
3. if(==1){
4.return
();
!. }
". if(&2=0){
#. return(+ltrsa('2, *2));
/. }
. else{
10. return(ltrsa('2, *2));
11. }
12. }
http://es.wikipedia.org/wiki/Multiplicaci%C3%B3n_por_duplicaci%C3%B3nhttp://es.wikipedia.org/wiki/Multiplicaci%C3%B3n_por_duplicaci%C3%B3n7/25/2019 Ejercicios-recursividad
4/14
Planteamiento:
Ejercicio 7. Programar un algoritmo recursivo que permita sumar los elementos de un vector.
Solucin:
Cdigo
1. intsav$c(intv , intn)
2. {
3. if(n ==0)
4. returnv n;
!. else
". returnsav$c(v, n -1)+v n;
#. }
Planteamiento:
Ejercicio 8. Programar un algoritmo recursivo que permita multiplicar los elementos de unvector.
Solucin:
Cdigo
1. intltilicar (intv$c , intta)
2. {
3. if(ta ==0)
4. return(v$c 0);
!. return(v$c ta*ltilicar (v$c, ta -1));
". }
7/25/2019 Ejercicios-recursividad
5/14
Planteamiento:
Ejercicio 9. Programar un algoritmo recursivo que calcule el #a$imo comun divisor de dosnmeros.
Solucin:
Cdigo
1. intsacarcd(inta, intb){
2. if(b==0)
3. returna;
4. else
!. returnsacarcd(b, a &b);
". }
#.
Planteamiento:
Ejercicio 10. Programar un algoritmo recursivo que determine si un nmero es positivo.
Solucin:
Cdigo
1. publicbooleanositivo(intn){
2. if(n0)returntrue;
3. elsereturnn$ativo(n);
4. }
!.
". publicbooleann$ativo(intn){
#. if(n%0)returnfalse;
7/25/2019 Ejercicios-recursividad
6/14
/. elsereturn ositivo(n);
. }
Planteamiento:
Ejercicio 11. Programar un algoritmo recursivo que determine si un nmero es impar utili!andorecursividad cru!ada.
Solucin:
Cdigo
1. publicbooleanar(intn){
2. if(n==0)returntrue;
3. elsereturniar(n-1);
4. }
!.
". publicbooleaniar(intn){
#. if
(n==0)return
false
;
/. elsereturnar(n-1);
. }
Planteamiento:
Ejercicio 12. Programar un algoritmo recursivo que permita sumar los elementos de una
matri!.
Solucin:
Cdigo
1. intsa (intfila, intcol, intord$n, intat )
2. {
7/25/2019 Ejercicios-recursividad
7/14
3. if(fila ==0col ==0)
4. returnat 00;
!. else
". if(col %0)
#. returnsa (fila -1, ord$n, ord$n, at);
/. else
. returnat filacol+sa (fila, col -1, ord$n, at);
10. }
Planteamiento:
Ejercicio 13. Programar un algoritmo recursivo que permita resolver el cuadro latino. Ejemplode cuadro latino:
0 0 0 0 10 0 0 1 20 0 1 2 30 1 2 3 41 2 3 4 5
Solucin:
Cdigo
1. latino (intfila, intcol, intcont, intord$n, intat )
2. {
3. if(fila ==0col ==0)
4. at 00=1;
!. else
". if(fila ==col)
#. latino (fila -1, ord$n -1, ord$n, ord$n, at);
7/25/2019 Ejercicios-recursividad
8/14
/. else
. {
10. at filacol=cont;
11. latino (fila, col -1, ord$n +1, ord$n, at);
12. }
13. }
Planteamiento:
Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matri!:
1 1 1 1 11 2 2 2 21 2 4 4 41 2 4 8 81 2 4 8 16
Solucin: Solucionado por: AmeRi!n"
Cdigo
1. publicclass5atri67$crsividad {
2.
3. privatestaticinta=0, a8=1, b=0;//Declaramos los datos necesarios
4. privatestaticintatri6 =newint"";//La matriz debe ser
cuadrada
!.
". publicstaticvoidain(9trinars){
#.
/. ll$nar5atri6(atri6, a, b);//Iniciamos el llamado recursio
. iriir();//im!rimimos la matriz
http://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Luckyhttp://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Lucky7/25/2019 Ejercicios-recursividad
9/14
10.
11. }
12.
13. publicstaticvoidll$nar5atri6(intatri6, inti, int:){
14.
1!. if(: atri6.l$nt-1){//Si lle"# a la ultima coluna$
reseteamos los datos !ara la si"uiente
1". i++;
1#. :=0;
1/. a8++;
1. }
20. if(i %atri6.l$nt){// com!ara %ue no &allamos lle"ado al
'inal
21.
22. if(i==(a8-1): =(a8-1)){//com!rueba %ue estemos
en el lu"ar adecuado$ es decir ira im!rimiento escaladamente
23. if(i==0)// si es la !rimera 'ila in"resamos
au()*
24. atri6i:=atri6i:=a8;
2!. else
2". atri6i:=atri6ii-
1*2;//in"resamos el alor corres!ondiente al ultimo de la +escala+ ,-
2#. ll$nar5atri6(atri6, i , :+1);
2/. }
2. else{//si no$ asi"namos los alores anteriores de la
escala
7/25/2019 Ejercicios-recursividad
10/14
30. if(:==0)// com!robamos si es el !rimer di"ito a
in"resar
31. atri6i:=:+1;
32. else
33. atri6i:=atri6i-1:;//
asi"namos el mismo numero de la 'ila anterior .i*0
34. ll$nar5atri6(atri6, i, :+1);
3!. }
3". }
3#. }
3/.
3. publicstaticvoidiriir(){//este metodo nos im!rime la matriz !or
consola
40.
41. for(inti=0;i%atri6.l$nt;i++){
42. for(int:=0;:%atri6.l$nt;:++){
43. 9
7/25/2019 Ejercicios-recursividad
11/14
Planteamiento:
Ejercicio 15. Programar un algoritmo recursivo que e%ecute la matri! del cubo m&gico.
Solucin:
Cdigo
1. voidaico(intat , intfil, intcol$dio, intc, intn)
2. {
3. if(c ==n *n)
4. {
!. at n-1col$dio=c;
". }
#. else
/. {
. if(fil %0col$dio ==n)
10. {
11. aico(at, fil +2, n -1, c, n);
12. }
13. else
14. {
1!. if(fil %0)
1". {
1#. aico(at, n -1, col$dio, c, n);
1/. }
1. else
7/25/2019 Ejercicios-recursividad
12/14
20. {
21. if(col$dio ==n)
22. {
23. aico(at, fil, 0, c, n);
24. }
2!. else
2". {
2#. if(at filcol$dio==0)
2/. {
2. at filcol$dio=c;
30. aico(at, fil -1, col$dio +1, c +1, n);
31. }
32. else
33. {
34. aico(at, fil +2, col$dio -1, c, n);
3!. }
3". }
3#. }
3/. }
3.
40. }
41. }
7/25/2019 Ejercicios-recursividad
13/14
Planteamiento:
Ejercicio 16. Programar un algoritmo recursivo que muestre el numero menor de un vector.
Solucin:
Cdigo
1. int$norv$c (int8 , intn, int$nor){
2. if(n ==0)
3. if($nor 8 n)return8 0;
4. elsereturn$nor;
!. else
". if($nor 8 n)return$norv$c (8, n -1, 8 n);
#. elsereturn$norv$c (8, n -1, $nor);}
Planteamiento:
Ejercicio 17. Programar un algoritmo recursivo que muestre el numero ma'or de un vector.
Solucin:
Cdigo
1. inta
7/25/2019 Ejercicios-recursividad
14/14
/. }
. }