13
Ejemplos de Recursividad 1. Planteamiento Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un número. Solución: view plainprint? 1. int factorial(int n){ 2. if(n==0){ 3. return 1; //Caso Base 4. } 5. else { 6. return n * factorial(n-1); //Fórmula Recursiva 7. } 8. } 2. Planteamiento Ejercicio 2: Programar un algoritmo recursivo que calcule un número de la serie fibonacci. Solución: view plainprint? 1. int fibonaci(int n){ 2. if(n==1 || n==2) { 3. return 1; 4. } 5. else{ 6. return fibonaci(n-1)+fibonaci(n-2); 7. } 8. } 3. Planteamiento Ejercicio 3: Programar un algoritmo recursivo que permita hacer la división por restas sucesivas. ver mas... Solución: view plainprint? 1. int division (int a, int b) { 2. if(b > a) { 3. return 0; 4. } 5. else { 6. return division(a-b, b) + 1; 7. } 8. } 4. Planteamiento Ejercicio 4: Programar un algoritmo recursivo que permita invertir un número.Ejemplo: Entrada:123 Salida:321 Solución: view plainprint? 1. int invertir (int n) { 2. if (n < 10) { //caso base 3. return n; 4. } 5. else { 6. return (n % 10) + invertir (n / 10) * 10; 7. }

Ejemplos de Recursividad

  • Upload
    davs-hy

  • View
    487

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Ejemplos de Recursividad

Ejemplos de Recursividad1. Planteamiento Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un número.Solución:

view plainprint?

1. int factorial(int n){  2. if(n==0){  3. return 1; //Caso Base  4. }  5. else {  6. return n * factorial(n-1);  //Fórmula Recursiva  7. }  8. }  

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

view plainprint?

1. int fibonaci(int n){  2. if(n==1 || n==2) {  3. return 1;  4. }  5. else{  6. return fibonaci(n-1)+fibonaci(n-2);  7. }  8. }  

3. Planteamiento Ejercicio 3: Programar un algoritmo recursivo que permita hacer la división por restas sucesivas. ver mas...Solución:

view plainprint?

1. int division (int a, int b) {  2. if(b > a) {  3. return 0;  4. }  5. else {  6. return division(a-b, b) + 1;  7. }  8. }  

4. Planteamiento Ejercicio 4: Programar un algoritmo recursivo que permita invertir un número.Ejemplo: Entrada:123 Salida:321Solución:

view plainprint?

1. int invertir (int n) {  2.  if (n < 10) {         //caso base  3.   return n;  4.  }  5.  else {  6.   return (n % 10) + invertir (n / 10) * 10;  7.  }  8. }  5. Planteamiento Ejercicio 5: Programar un algoritmo recursivo que permita sumar los dígitos de un número.Ejemplo: Entrada:123 Resultado:6Solución:

view plainprint?

1. int sumar_dig (int n) {  2. if (n == 0) {      //caso base  3. return n;  

Page 2: Ejemplos de Recursividad

4. }  5. else {  6. return sumar_dig (n / 10) + (n % 10);  7. }  8. }  

6. Planteamiento Ejercicio 6: Programar un algoritmo recursivo que permita hacer una multiplicación, utilizando el método Ruso. Para mas información: aquí.Solución:

view plainprint?

1. int mult_rusa(int A, int B) {  2. if(A==1){  3. return (B);  4. }  5. if(A%2!=0){  6. return (B+mult_rusa( A/2 , B*2));  7. }  8. else{  9. return(mult_rusa( A/2 , B*2));  10. }                        11. }  

7. Planteamiento Ejercicio 7: Programar un algoritmo recursivo que permita sumar los elementos de un vector.Solución:

view plainprint?

1. int suma_vec(int v [], int n) {  2. if (n == 0) {  3. return v [n];  4. }  5. else {  6. return suma_vec(v, n - 1) + v [n];  7. }  8. }   

8. Planteamiento Ejercicio 8: Programar un algoritmo recursivo que permita multiplicar los elementos de un vector.Solución:

view plainprint?

1. int multiplicar (int vec [], int tam) {  2. if (tam == 0) {  3. return (vec [0]);  4. }  5. return (vec [tam] * multiplicar (vec, tam - 1));  6. }  

9. Planteamiento Ejercicio 9: Programar un algoritmo recursivo que calcule el Maximo comun divisor de dos números.Solución:

view plainprint?

1. int sacar_mcd(int a, int b) {  2. if(b==0) {  3.     return a;  4. }  5. else {  6.     return sacar_mcd(b, a % b);  7. }  8. }  

Page 3: Ejemplos de Recursividad

10. Planteamiento Ejercicio 10: Programar un algoritmo recursivo que determine si un número es positivo/negativo.Solución:

view plainprint?

1. public boolean positivo(int n){  2.    if(n<0) return true;  3.    else return negativo(n);  4.   }  5.   6.   public boolean negativo(int n){  7.    if(n>0) return false;  8.    else return  positivo(n);  9.   }  11. Planteamiento Ejercicio 11: rogramar un algoritmo recursivo que determine si un número es impar utilizando recursividad cruzada.Solución:

view plainprint?

1. public boolean par(int n){  2. if(n==0) {  3. return true;  4. }  5. else {  6. return impar(n-1);  7. }  8. }  9.   10. public boolean impar(int n){  11. if(n==0) {  12. return false;  13. }  14. else {  15. return par(n-1);  16. }  17. }   

12. Planteamiento Ejercicio 12: Programar un algoritmo recursivo que permita sumar los elementos de una matriz.Solución:

view plainprint?

1.  int suma (int fila, int col, int orden, int mat [] [])  2.   {  3. if (fila == 0 && col == 0)  4.   return mat [0] [0];  5. else  6.   if (col < 0)  7. return suma (fila - 1, orden, orden, mat);  8.   else  9. return mat [fila] [col] + suma (fila, col - 1, orden, mat);  10.   }  13. Planteamiento Ejercicio 13: Programar un algoritmo recursivo que muestre el numero menor de un vector.Solución:

view plainprint?

1. int menorvec (int x [], int n, int menor) {  2. if (n == 0) {  3. if (menor > x [n]) {  4.  return x [0];  5. }  6.      else {  7.  return menor;  8. }  

Page 4: Ejemplos de Recursividad

9. }  10.  else{  11. if (menor > x [n]) {  12.  return menorvec (x, n - 1, x [n]);  13. }  14.      else {  15.  return menorvec (x, n - 1, menor);  16. }  17. }  18. }  19.   20. int mayorvec (int numeros [], int posicion) {  21.     int aux;  22.     if (posicion == 0) {  23.  return numeros [posicion];  24.   }  25.     else {  26.  aux = mayor (numeros, posicion - 1);  27.  if (numeros [posicion] > aux){  28.   return numeros [posicion];  29.  }  30.  else{  31.   return mayor (numeros, posicion - 1);  32.  }  33.      }   34. }  

Page 5: Ejemplos de Recursividad

mplementación

A continuación se muestra el Ordenamiento por inserción en distintos lenguajes de programación:

[editar]C

void ordIns(int vector[], int n) { int i, j, indice; for (i=1; i < n; i++) { indice = vector[i]; for (j=i-1;j >= 0 && vector[j] > indice;j--) { vector[j + 1] = vector[j]; } vector[j+1] = indice; }}[editar]C++

template <class T> void insertionSort(std::vector<T>& v, int fin) { int i, j, index; for (i=1; i <fin; i++) { index = v.at(i); j = i-1; while (j >= 0 && v.at(j)>index) { v.at(j+1)=v.at(j); j--; } v.erase(v.begin()+j+1); v.insert(v.begin()+j+1,index); }}

public static void insertSort (int[]& v) { int aux; int j; for (int i=1; i<v.length; i++) { aux=v[i]; for (j=i-1; j>=0 && v[j]>aux; j--){ v[j+1] = v[j]; v[j] = aux;

Page 6: Ejemplos de Recursividad

} }}[editar]Java

int temp, j; for (int i=1; i < vector.length; i++){ temp = vector[i]; j = i-1; while (j >= 0 && vector[j] > temp){ vector[j + 1] = vector[j]; j--; } vector[j+1] = temp; }[editar]JavaScript

for (var i=1; i < vector.length; i++) { var temp = vector[i]; var j = i-1; while (j >= 0 && vector[j] > temp) { vector[j + 1] = vector[j]; j--; } vector[j+1] = temp; }

my @array

= qw(

1 7 4 9 4 7 2 3 0 8

);

insercion(\@array);

say "@array";

sub insercion {

my $array_ref = shift; arg. es una ref. a un array

for my $i (1 .. $#$array_ref) { # para todos los índices

Page 7: Ejemplos de Recursividad

my $j = $i - 1; # índice anterior

my $x = $array_ref->[$i]; # elemento a comparar

next if $array_ref->[$j] <= $x; # salida rápida

do {

$j--; # buscamos

} while ($j >= 0 and $array_ref->[$j] > $x);

splice @$array_ref, $j+1, 0, splice @$array_ref, $i, 1; # ¡extracción e

inserción!

}

}

__END__ 0 1 2 3 4 4 7 7 8 9 </source>

[editar]PHP

function insert_sort($arr){ $count = count($arr); for($i=1; $i<$count; $i++){ $tmp = $arr[$i]; for ($j=$i-1; $j>=0 && $arr[$j] > $tmp; $j--){ $arr[$j+1] = $arr[$j]; } $arr[$j+1] = $tmp; } return $arr;}[editar]Pascal

Procedure InsertionSort(var insertion:Array_integer; array_size: Integer);Var i, j, index : Integer; Begin For i := 2 to array_size do Begin index := insertion[i]; j := i-1; While ((j > 0) AND (insertion[j] > index)) do Begin insertion[j+1] := insertion[j]; j := j - 1; End; insertion[j+1] := index; End; End;

Page 8: Ejemplos de Recursividad

[editar]Python

def insertionSort(numeros): #numeros es una lista tama = len(numeros) #creamos una variable igual al tamaño de la lista for i in range(tama): indice = numeros[i] a = i-1 while (a >= 0 and numeros[a] > indice): numeros[a+1] = numeros[a] a = a-1 numeros[a+1] = indice print (numeros) #imprime la lista ordenada[editar]Ruby

def insertion_sort(array) for j in 1...array.size key = array[j] i = j - 1 while i >= 0 and array[i] > key array[i + 1] = array[i] i = i - 1 end array[i + 1] = key end arrayend[editar]Visual Basic .NET

Private Sub insertionSort(ByVal numbers() As Integer) ' Es una función, 'debemos pasarle el array de números desde el Sub Main() Dim i, j, index As Integer i = 1 Do index = numbers(i) j = i - 1 While ((j >= 0) And (numbers(j) > index)) numbers(j + 1) = numbers(j) j = j - 1 End While numbers(j + 1) = index i = i + 1 Loop Until i > (UBound(v)) End Sub[editar]C#

class Program

Page 9: Ejemplos de Recursividad

{ public static void Main(string[] args) { int x=0; do{ Leer leer=new Leer(); leer.dato(); Console.WriteLine("Repitiendo..."); }while(x==0); Console.ReadKey(true); } } public class Inserccion_Directa { private static int temporal, posicion=0; static int[] x=new int[15]; public int ordenar(int entrada){ x[posicion]=entrada; posicion++; for(int y=1;y<posicion;y++){ temporal=x[y]; for(int z=y-1;z>=0 && x[z]>temporal; z--){ x[z+1] = x[z]; x[z] = temporal; } } for(int m=0;m<x.Length;m++){ Console.WriteLine("Contenido "+x[m]); } return 0; } } public class Leer{ int cadena; public int dato(){ cadena=Convert.ToInt32(Console.ReadLine()); Inserccion_Directa objeto1=new Inserccion_Directa(); objeto1.ordenar(cadena); return cadena; }

Page 10: Ejemplos de Recursividad

}

[editar]Prolog

insercion([],[]).insercion(XS,YS):- insercion_aux(XS,[],YS). insercion_aux([],YS,YS).insercion_aux([X|XS],AC,YS):- inserta(X,AC,AC1), insercion_aux(XS,AC1,YS). inserta(X,[],[X]).inserta(X,[Y|YS],[X,Y|YS]):- X<Y.inserta(X,[Y|YS],[Y|XS]):- X>=Y, inserta(X,YS,XS).

Page 11: Ejemplos de Recursividad

algoritmo insercion( A : array de n elementos indizados de 1 a n) variables: enteros i,j, temporal //estas son las pasadas, desde 2 hasta n //en cada una intentaremos encontrar la posición //relativa del elemento i entre los anteriores para i desde 2 hasta n j=i-1 //vamos "descendiendo" el elemento //haciendo intercambios mientras (j>=1) Y (A[j]>A[j+1]) hacer //intercambio de la posicion j y la siguiente temporal=A[j+1] A[j+1]=A[j] A[j]=temporal j=j-1 fin mientras fin parafin algoritmo

algoritmo insercion( A : array de n elementos indizados de 1 a n) variables: enteros i, j, v //estas son las pasadas, desde 2 hasta n //en cada una intentaremos encontrar la posición //relativa del elemento i entre los anteriores para i desde 2 hasta n //tomamos el elemento a examinar en una variable //temporal v v=A[i] //empezamos a comparar con los anteriores. j=i-1 //en este bucle intentamos saber cual es su //lugar y le vamos haciendo hueco mientras (j>=1) Y (A[j]>v) hacer //desplazamos el elemento A[j] A[j+1]=A[j] j=j-1 fin mientras A[j+1]=v fin parafin algoritmo

Page 12: Ejemplos de Recursividad