Sei sulla pagina 1di 3

Recursividad

La recursividad no es una estructura de datos, sino que es una tcnica que nos
permite que un bloque de instrucciones se ejecute n veces. Remplaza en
ocasiones a estructuras repetitivas.
En C# los mtodos pueden llamarse a s mismos. Si dentro de un mtodo
existe la llamada a s mismo decimos que el mtodo es recursivo.
Cuando un mtodo se llama a s mismo, se asigna espacio en la pila para las
nuevas variables locales y parmetros.
Al volver de una llamada recursiva, se recuperan de la pila las variables locales
y los parmetros antiguos y la ejecucin se reanuda en el punto de la llamada
al mtodo.
La clave est en que en cada llamada el problema se simplifica de tal modo
que llegar el momento en que no har falta llamar nuevamente al mtodo
recursivo. (Tomando por ejemplo algo realista como Una rama de un rbol a su vez
tiene ramas, que a su vez puede tener ramas y as sucesivamente, pero llega el momento
en que se llega a una rama que solo tiene hojas.)
Utilizar
"Si el nmero es menor que cero, se rechaza. Si no es un entero, se rechaza. Si el
nmero es cero, su factorial es uno. Si el nmero es mayor que cero, se multiplica por
el factorial del nmero menor inmediato".
Para calcular el factorial de cualquier nmero mayor que cero debe calcular como
mnimo el factorial de otro nmero. La funcin debe llamarse a s misma para el
siguiente nmero menor antes de que se pueda ejecutar en el nmero actual, lo cual
constituye un ejemplo de recursividad.

La recursividad y la iteracin (recorrido en bucles) estn ntimamente relacionadas: una


funcin puede devolver los mismos resultados con recursividad o con iteracin.
Normalmente, un clculo determinado se prestar a una tcnica u otra; slo deber
elegir el enfoque ms natural o el que ms le guste.
A pesar de la utilidad de la recursividad, es fcil crear una funcin recursiva que no
devuelva nunca un resultado y no llegue a un extremo. Este tipo de recursividad hace
que el sistema ejecute un bucle infinito. Por ejemplo, omitir la primera regla (la de los
nmeros negativos) de la descripcin verbal del clculo de un factorial e intente
calcular el factorial de un nmero negativo. Se produce un error, ya que para calcular
el factorial de -24, por ejemplo, hay que calcular el factorial de -25. Para calcular el
factorial de -25, hay que calcular primero el factorial de -26, y as sucesivamente.
Obviamente, el bucle nunca se detendr.
Otro problema que puede surgir con la recursividad es que la funcin recursiva utilice
todos los recursos disponibles (como la memoria del sistema y el espacio de la pila).

Cada vez que una funcin recursiva se llama a s misma (o llama a otra funcin que
llama a la funcin original), utiliza algunos recursos. Estos recursos se liberan cuando la
funcin recursiva termina, pero una funcin que tenga demasiados niveles de
recursividad podra utilizar todos los recursos disponibles. Cuando esto sucede, se
produce una excepcin.
Para no presentar problemas Hay que disear la funcin de forma que cuente el
nmero de veces que se llama a s misma y establezca un lmite en el nmero de
llamadas. Si la funcin se llama a s misma ms veces que el umbral definido, puede
hacer que la funcin termine automticamente. El nmero mximo ptimo de
iteraciones depende de la funcin recursiva.

http://www.csharpya.com.ar/detalleconcepto.php?codigo=175&inicio=40
http://jcastrom.jimdo.com/inform%C3%A1tica/recursividad-en-c/

Potrebbero piacerti anche