martes, 8 de mayo de 2012

Recursividad



Hola a todos,

En este caso veremos algo llamado recursividad y lo aplicaremos a la resolución de un problemita.

Para comenzar, que es recursividad?

Bueno, para mí  un algoritmo de recursividad, es un algoritmo que busca la solución de un problema determinado haciendo o realizando llamados así mismo.

Para ejemplificar, diremos que es un pedazo de código muy pequeño que puede resolver problemas muy grandes llamándose así mismo una cantidad de veces determinadas que se pueden o no especificar.

Pero, para implementarlo hay que tener encuentra varias cositas:
  • ·         Es necesario que el método que aremos recursivo tenga una salida. Ya que podría caer en un llamado infinito y consumir los recursos de máquina.
  • ·         Estos algoritmos no ayudan a superar problemas con pedazos de código pequeños.
  • ·         Hay que tener en cuenta que entre más lejos este la solución (Entre mas llamados así mismo) el método se puede volver mas y mas lento.
El ejemplo que aremos, será uno muy común que es el de buscar el factorial de un numero,Pero de manera recursiva, sin ciclos ni nada por el estilo. Solo haciendo llamados asi mismo.

·         El programa consistirá en 3 métodos y 2 variables globales.

  • ·         Un método, que será el principal main();
  • ·         Un método que toma  y muestre los valores necesarios llamado sacarFactorial();
  • ·         Y el ultimo que será el método recursivo, y tendrá como parámetro el numero que multiplicaremos y se ira decrementando.

  • ·         Y las dos variables que serán uno para llevar el conteo y será el que da la salida del método.
  • ·         Otra variable que ira almacenando el valor calculado en cada caso.



//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


//Este programa tiene como limite el definido por los tipos de datos primitivos
//por lo cual si quieres implementarlos para un muero indeterminado de digitos tendran que tener encuenta
namespace Recursividad
{
    class Program
    {
        private static int cont;
        private static long numero;

        static void Main(string[] args)
        {
            sacarFactorial();
        }
        
        /**
         * En este metodo sera el que pida el valor al cual se le quiera sacar el factorial
         * y llamara al etodo recursivo
         **/
        public static void sacarFactorial()
        {
            Console.WriteLine("Digite el numero que desea sacar el Factorial");
            numero = Convert.ToInt16(Console.ReadLine());
            cont = (int)numero-1;

            numero=calcularFactorial(cont);
            Console.WriteLine("El Factorial es "+numero);
            Console.ReadKey();
        }

        /**
         * Este sera el metodo Recursivo. El cual multipplicara una variable global llamada numero
         * por el valor que se le pase por parametro. Este sera el valor que iremos decrmentando
         * y cuando sea igual a 0 entonces retonara el valor final calculado, por lo cual usamos una variable global
         **/
        public static long calcularFactorial(int fact)
        {
            numero *= fact;
            cont--;
            if(cont >0)
            {
                calcularFactorial(cont); 
            }
                        
            return numero;
        }

    }
}



No hay comentarios:

Publicar un comentario

Alguna duda?