Lala
La recursividad es una técnica de programación que se utiliza para realizar una llamada a una función desde ella misma, de allí su nombre. El ejemplo más utilizado por su fácil comprensión es el cálculo de números factoriales. El factorial de 0 es, por definición, 1. Los factoriales de números mayores se calculan mediante la multiplicación de 1 * 2 * ..., incrementando el número de1 en 1 hasta llegar al número para el que se está calculando el factorial.
Return: La sentencia return se emplea para salir de la secuencia de ejecución de las sentencias de un método y, opcionalmente, devolver un valor. Tras la salida del método se vuelve a la secuencia de ejecución del programa al lugar de llamada de dicho método.
Un algoritmo recursivo: Es un algoritmo que expresa lasolución de un problema en términos de
una llamada a sí mismo. La llamada a sí mismo se conoce como llamada recursiva o recurrente. #include <iostream>
#include <cstdlib>
using namespace std;
int Factorial(int n);
int main(){
int valor;
system("clear");
cout << "Introduzca numero a calcular: ";
cin >> valor;
cout << "\nEl Factorial de " << valor<< " es: " << Factorial(valor) << endl;
return 0;
}
int Factorial(int n){
if (n < 0){
cout << “No existe el factorial de un numero negativo.\n”;
}else if(n < 2){
return 1;
}else
return n * Factorial(n-1);
}
Generalmente, si la primera llamada al subprograma se plantea sobre un problema de tamaño u orden N, cada nueva ejecución recurrentedel mismo se planteará sobre problemas, de igual naturaleza que el original, pero de un tamaño menor que N. De esta forma, al ir reduciendo progresivamente la complejidad del problema a resolver, llegará un momento en que su resolución sea más o menos trivial (o, al menos, suficientemente manejable como para resolverlo de forma no recursiva). En esa situación diremos que estamos ante uncaso base de la recursividad. Es frecuente que los algoritmos recurrentes sean más ineficientes en tiempo que los iterativos aunque suelen ser mucho más breves en espacio.
Recursividad directa vs indirecta.
Cuando en una subrutina hay llamadas a ella misma se habla de recursividad directa, en contraposición, cuando se tienen varias subrutinas y éstas se llaman unas a otrasformando ciclos se dice que la recursión es indirecta.
Subrutina_A → Subrutina_A → Subrutina_A
Subrutina_A → Subrutina_B → Subrutina_C → Subrutina_D → Subrutina_A
Propiedades de las definiciones o algoritmos recursivos:
● No debe generar una secuencia infinita de llamadas así mismo, dicho de otro modo ha de existir al menos un caso base.
● Una función recursiva f debe definirse en términos que noimpliquen a f al menos en un argumento o grupo de argumentos.
● Debe existir una "salida" de la secuencia de llamadas recursivas.
● Cada llamada recurrente se debería definir sobre un problema de menor complejidad (algo más fácil de resolver).
Tipos de Recursión:
La recursión en los subprogramas puede darse de dos maneras diferentes
A) Directa: El sub-programa se llama directamentea sí mismo.
Subprograma P
-------------
-------------
Llamada a P
------------
Recursión Directa
Subprograma P
-------------
-------------
Llamada a P
------------
Recursión Directa
* B) Indirecta: el subprograma llama a otro subprograma, y éste a su vez llama al primero. También se da el caso de recursión indirecta cuando un subprograma llama a otro y éste a un tercero que a suvez llama al primer subprograma
Subprograma P Subprograma Q
----------------- --------------------
----------------- Llamada a P
Llamada a Q --------------------
-----------------
Subprograma P Subprograma Q
-----------------...
Regístrate para leer el documento completo.