SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Introducción a la computación
Clase 13
Introducción a las funciones recursivas
Prof. Ciro Nuñez
Ciro.nunez.i@uni.edu.pe
Introducción a las funciones recursivas
TEMAS DE LA LECCIÓN
● Definicion
● Ejemplos
Introducción a las funciones recursivas
DEFINICIÓN
● Una función recursiva es una función que se llama a si
misma
Programa principal main()
Funcion_1() Funcion_2() Funcion_3()
Funcion_4()
Funcion_5()
(recursiva)
Introducción a las funciones recursivas
DEFINICIÓN
● Una función recursiva es una función que se llama a si
misma
Introducción a las funciones recursivas
DEFINICIÓN: Recursividad
La recursividad es una técnica de
programación que consiste en:
● Elaborar una función que se llame a sí misma
de forma repetida hasta satisfacer una
condición de parada (CP).
● Ésta CP determina hasta cuando se seguirá
● llamando la función a sí misma. Esta
condición se le conoce como la “solución
trivial al problema”, porque al cumplirse
provoca que se comience a retornar valores a
las llamadas anteriores de la misma función,
f(5) ->función que calcula el factorial
de 5 Condicion de Parada : f(1)=1 || f(0)=1
Introducción a las funciones recursivas
DEFINICIÓN: Recursividad
● Una función recursiva sigue la estrategia del “divide y
vencerás”, dividiendo la definición de la misma en dos
partes:
a) La parte que la función no sabe cómo resolver. La parte que
la función no sabe cómo resolver debe replantear el problema
original de modo que la solución sea más simple, o más pequeña que
la versión original del problema. Como el problema todavía no está
resuelto, sino que solamente se ha replanteado, se hace una nueva
llamada a la función para que intente resolver el problema más
pequeño. Si todavía no lo puede resolver, se vuelve a replantear,
Introducción a las funciones recursivas
DEFINICIÓN: Recursividad
● Una función recursiva sigue la estrategia del “divide y
vencerás”, dividiendo la definición de la misma en dos
partes:
● b) La parte que la función sabe cómo resolver
En ese momento, la función, devolverá a la llamada anterior un
resultado exacto. Cada llamada “anterior” devolverá el resultado
necesario a las llamadas recursivas que le preceden.
Introducción a las funciones recursivas
Introducción a las funciones recursivas
Introducción a las funciones recursivas
Introducción a las
funciones recursivas
data[5]={10,20,30,40,60};
sumArrayPublic(data,5) = data[4]+ sumArrayPublic(data,4);
sumArrayPublic(data,4) = data[3]+ sumArrayPublic(data,3);
sumArrayPublic(data,3) = data[2]+ sumArrayPublic(data,2);
sumArrayPublic(data,2) = data[1]+ sumArrayPublic(data,1);
sumArrayPublic(data,1) = data[0]
Introducción a las
funciones recursivas
Ejemplo
● Un contador recursivo
● Cual sera la salida?
Introducción a las
funciones recursivas
Ejemplo
● Un contador recursivo
Introducción a las funciones recursivas
Ejemplo
● Calcular la potencia
● con una implementación
recursiva.
Introducción a las funciones recursivas
Ejemplo
● fib(n) = fib(n-1)+fib(n-2)
se puede expresar
fácilmente con una
implementación recursiva.
#include <iostream>
using namespace std;
int fib(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return fib(n-2) + fib(n-1);
}
}
int main(){
int Numero, Fib;
for (Numero = 20; Numero >= 0; Numero--){
Fib= fib(Numero);
cout<<"Numero=:"<<Numero << "tFib: " << Fib << endl ;
}
Return 0;
}
Introducción a las funciones recursivas
Ejemplo
● Cuantas veces se llamó a la
función fib()?
Puede usar una variable
global para averiguarlo.
#include <iostream>
using namespace std;
int countfib=0;
int fib(int n) {
countfib++;
if (n == 0 || n == 1) {
return 1;
} else {
return fib(n-2) + fib(n-1);
}
}
Para el ejemplo anterior,
donde n=20; countfib=:57291
Variable Global
Ambito (Scope)
Dónde se ha declarado
una variable,
determina desde
dónde puede ser
accesada
countfib - tiene ámbito
global - puede ser
accesada desde
cualquier función
Introducción a las funciones recursivas
#include <iostream>
using namespace std;
int countfib=0;
int fib(int n) {
countfib++;
if (n == 0 || n == 1) {
return 1;
} else {
return fib(n-2) + fib(n-1);
}
}
int main(){
int Numero, Fibn;
for (Numero = 20; Numero >= 0; Numero--){
Fibn= fib(Numero);
cout<<"Numero=:"<<Numero << "tFibn: " << Fibn << endl
;
}
cout<<"countfib=:"<<countfib << endl;
return 0;
}
Variable Global
Ambito (Scope)
result Tiene un ámbito de
función.
Cada función puede tener
su propia variable result
Introducción a las funciones recursivas
int numCalls = 0;
int raiseToPower(int base, int exponent) {
numCalls = numCalls + 1;
int result = 1;
for (int i = 0; i < exponent; i = i + 1) {
result = result * base;
}
// A
return result;
}
int max(int num1, int num2) {
numCalls = numCalls + 1;
int result;
if (num1 > num2) {
result = num1;
}
else {
result = num2;
}
// B
return result;
}
Ambito global
numCalls
Introducción a las funciones recursivas
int numCalls = 0;
int raiseToPower(int base, int exponent) {
numCalls = numCalls + 1;
int result = 1;
for (int i = 0; i < exponent; i = i + 1)
{
result = result * base;
}
// A
return result;
}
int max(int num1, int num2) {
numCalls = numCalls + 1;
int result;
if (num1 > num2) {
result = num1;
}
else {
result = num2;
}
// B
return result;
Ambito
raiseToPower()
int base, int exponent, int
result
Ambito max()
int num1, int num2, int result
Ambito
No se puede
acceder a
variables fuera
del ámbito
Introducción a las funciones recursivas
Error común en recursividad
● Si se omite el caso base o se escribe el paso recursivo
incorrectamente, de manera que no converja en el caso base, se
produce una recursividad “infinita”, con lo cual la memoria se
agotará en un momento dado. Esto es analógico para el problema de
un ciclo infinito en una solución iterativa (no recursiva).
Tip de rendimiento:
● Evite los programas recursivos al estilo Fibonacci que produzcan una
“explosión” exponencial de llamadas.
● Las llamadas recursivas requieren tiempo y consumen memoria
Introducción a las funciones recursivas
Ejemplo
Calcular el factorial de
un número utilizando
recursividad
/* Calcular el factorial de un número utilizando recursividad */
#include <iostream>
using namespace std;
//prototipo de función factorial
long int factorial (int n);
// parámetro n: ingreso del numero para calcular su factorial
// valor devuelto: factorial del parámetro de entrada n
int main (){
int n;
//Leer la cantidad entera ingresada por el usuario
cout<<"Calcula del factorial de un numero entero positivo"<<endl;
do{
cout<<endl<<"Digite un Numero entero positivo: ";
cin>>n;
if(n<0)
cout<<endl<<"-> error, ingreso valor negativo, intente de nuevo..";
}while(n<0);
//Calcular y visualizar el factorial
cout<<endl<<"RESULTADO de "<<n<<"! es "<< factorial(n);
return 0;
}
Introducción a las funciones recursivas
Ejemplo
Calcular el factorial de
un número utilizando
recursividad
/***************************************************************
* Calcular el factorial de un número utilizando recursividad *
****************************************************************/
//Definición de la función factorial
long int factorial(int n){
if((n == 0) || (n == 1)){
return(1);
}
else{
/* Recursividad: Se vuelve a llamar la función factorial
con un problema más simple:
factorial del término anterior n-1 */
return (n * factorial(n-1));
}
}
//condición trivial: de retorno de función
Introducción a las funciones recursivas
Ejemplo
Invertir una cadena
utilizando recursividad
Introducción a las funciones recursivas
Ejemplo
Invertir una cadena
utilizando recursividad

Más contenido relacionado

La actualidad más candente

Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadenaTensor
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punterospedreror1
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++yesid19
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de ContextoBrayhan Acosta
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++Idalia Tristan
 
Informe Final Del Proyecto Poo
Informe Final Del Proyecto PooInforme Final Del Proyecto Poo
Informe Final Del Proyecto PooEPN
 
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)José Antonio Sandoval Acosta
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosJosé Antonio Sandoval Acosta
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CDiego Santimateo
 

La actualidad más candente (20)

Lenguajes no regulares
Lenguajes no regularesLenguajes no regulares
Lenguajes no regulares
 
Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadena
 
Vectores en programación
Vectores en programaciónVectores en programación
Vectores en programación
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punteros
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Elementos basicos C++
Elementos basicos C++Elementos basicos C++
Elementos basicos C++
 
Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++
 
Jerarquia de chomsky
Jerarquia de chomskyJerarquia de chomsky
Jerarquia de chomsky
 
Listas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de DatosListas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de Datos
 
Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
Informe Final Del Proyecto Poo
Informe Final Del Proyecto PooInforme Final Del Proyecto Poo
Informe Final Del Proyecto Poo
 
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
 
Programación 1: funciones en C
Programación 1: funciones en CProgramación 1: funciones en C
Programación 1: funciones en C
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
7.arreglos y vectores en c++
7.arreglos y vectores en c++7.arreglos y vectores en c++
7.arreglos y vectores en c++
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivos
 
Recursividad
RecursividadRecursividad
Recursividad
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
 

Similar a Introducción funciones recursivas (20)

03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
Funciones
FuncionesFunciones
Funciones
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimiento
 
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
 
07 funciones
07 funciones07 funciones
07 funciones
 
11 Funciones
11 Funciones11 Funciones
11 Funciones
 
RECURSIVIDAD C++
RECURSIVIDAD C++RECURSIVIDAD C++
RECURSIVIDAD C++
 
Funcionesenlenguaje c
Funcionesenlenguaje cFuncionesenlenguaje c
Funcionesenlenguaje c
 
Recursión
RecursiónRecursión
Recursión
 
11funciones 1231096290787715-2
11funciones 1231096290787715-211funciones 1231096290787715-2
11funciones 1231096290787715-2
 
Catalan
CatalanCatalan
Catalan
 
Guía funciones
Guía funcionesGuía funciones
Guía funciones
 
Presen iii 26 funciones
Presen iii  26 funcionesPresen iii  26 funciones
Presen iii 26 funciones
 
Funciones
FuncionesFunciones
Funciones
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Curso recursividad
Curso   recursividadCurso   recursividad
Curso recursividad
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
Funciones en Lenguaje C
Funciones en Lenguaje CFunciones en Lenguaje C
Funciones en Lenguaje C
 
Informe Tecnico recursividad
Informe Tecnico recursividadInforme Tecnico recursividad
Informe Tecnico recursividad
 

Último

Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 

Último (7)

Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 

Introducción funciones recursivas

  • 1. Introducción a la computación Clase 13 Introducción a las funciones recursivas Prof. Ciro Nuñez Ciro.nunez.i@uni.edu.pe
  • 2. Introducción a las funciones recursivas TEMAS DE LA LECCIÓN ● Definicion ● Ejemplos
  • 3. Introducción a las funciones recursivas DEFINICIÓN ● Una función recursiva es una función que se llama a si misma Programa principal main() Funcion_1() Funcion_2() Funcion_3() Funcion_4() Funcion_5() (recursiva)
  • 4. Introducción a las funciones recursivas DEFINICIÓN ● Una función recursiva es una función que se llama a si misma
  • 5. Introducción a las funciones recursivas DEFINICIÓN: Recursividad La recursividad es una técnica de programación que consiste en: ● Elaborar una función que se llame a sí misma de forma repetida hasta satisfacer una condición de parada (CP). ● Ésta CP determina hasta cuando se seguirá ● llamando la función a sí misma. Esta condición se le conoce como la “solución trivial al problema”, porque al cumplirse provoca que se comience a retornar valores a las llamadas anteriores de la misma función, f(5) ->función que calcula el factorial de 5 Condicion de Parada : f(1)=1 || f(0)=1
  • 6. Introducción a las funciones recursivas DEFINICIÓN: Recursividad ● Una función recursiva sigue la estrategia del “divide y vencerás”, dividiendo la definición de la misma en dos partes: a) La parte que la función no sabe cómo resolver. La parte que la función no sabe cómo resolver debe replantear el problema original de modo que la solución sea más simple, o más pequeña que la versión original del problema. Como el problema todavía no está resuelto, sino que solamente se ha replanteado, se hace una nueva llamada a la función para que intente resolver el problema más pequeño. Si todavía no lo puede resolver, se vuelve a replantear,
  • 7. Introducción a las funciones recursivas DEFINICIÓN: Recursividad ● Una función recursiva sigue la estrategia del “divide y vencerás”, dividiendo la definición de la misma en dos partes: ● b) La parte que la función sabe cómo resolver En ese momento, la función, devolverá a la llamada anterior un resultado exacto. Cada llamada “anterior” devolverá el resultado necesario a las llamadas recursivas que le preceden.
  • 8. Introducción a las funciones recursivas
  • 9. Introducción a las funciones recursivas
  • 10. Introducción a las funciones recursivas
  • 11. Introducción a las funciones recursivas data[5]={10,20,30,40,60}; sumArrayPublic(data,5) = data[4]+ sumArrayPublic(data,4); sumArrayPublic(data,4) = data[3]+ sumArrayPublic(data,3); sumArrayPublic(data,3) = data[2]+ sumArrayPublic(data,2); sumArrayPublic(data,2) = data[1]+ sumArrayPublic(data,1); sumArrayPublic(data,1) = data[0]
  • 12. Introducción a las funciones recursivas Ejemplo ● Un contador recursivo ● Cual sera la salida?
  • 13. Introducción a las funciones recursivas Ejemplo ● Un contador recursivo
  • 14. Introducción a las funciones recursivas Ejemplo ● Calcular la potencia ● con una implementación recursiva.
  • 15. Introducción a las funciones recursivas Ejemplo ● fib(n) = fib(n-1)+fib(n-2) se puede expresar fácilmente con una implementación recursiva. #include <iostream> using namespace std; int fib(int n) { if (n == 0 || n == 1) { return 1; } else { return fib(n-2) + fib(n-1); } } int main(){ int Numero, Fib; for (Numero = 20; Numero >= 0; Numero--){ Fib= fib(Numero); cout<<"Numero=:"<<Numero << "tFib: " << Fib << endl ; } Return 0; }
  • 16. Introducción a las funciones recursivas Ejemplo ● Cuantas veces se llamó a la función fib()? Puede usar una variable global para averiguarlo. #include <iostream> using namespace std; int countfib=0; int fib(int n) { countfib++; if (n == 0 || n == 1) { return 1; } else { return fib(n-2) + fib(n-1); } } Para el ejemplo anterior, donde n=20; countfib=:57291 Variable Global
  • 17. Ambito (Scope) Dónde se ha declarado una variable, determina desde dónde puede ser accesada countfib - tiene ámbito global - puede ser accesada desde cualquier función Introducción a las funciones recursivas #include <iostream> using namespace std; int countfib=0; int fib(int n) { countfib++; if (n == 0 || n == 1) { return 1; } else { return fib(n-2) + fib(n-1); } } int main(){ int Numero, Fibn; for (Numero = 20; Numero >= 0; Numero--){ Fibn= fib(Numero); cout<<"Numero=:"<<Numero << "tFibn: " << Fibn << endl ; } cout<<"countfib=:"<<countfib << endl; return 0; } Variable Global
  • 18. Ambito (Scope) result Tiene un ámbito de función. Cada función puede tener su propia variable result Introducción a las funciones recursivas int numCalls = 0; int raiseToPower(int base, int exponent) { numCalls = numCalls + 1; int result = 1; for (int i = 0; i < exponent; i = i + 1) { result = result * base; } // A return result; } int max(int num1, int num2) { numCalls = numCalls + 1; int result; if (num1 > num2) { result = num1; } else { result = num2; } // B return result; }
  • 19. Ambito global numCalls Introducción a las funciones recursivas int numCalls = 0; int raiseToPower(int base, int exponent) { numCalls = numCalls + 1; int result = 1; for (int i = 0; i < exponent; i = i + 1) { result = result * base; } // A return result; } int max(int num1, int num2) { numCalls = numCalls + 1; int result; if (num1 > num2) { result = num1; } else { result = num2; } // B return result; Ambito raiseToPower() int base, int exponent, int result Ambito max() int num1, int num2, int result Ambito No se puede acceder a variables fuera del ámbito
  • 20. Introducción a las funciones recursivas Error común en recursividad ● Si se omite el caso base o se escribe el paso recursivo incorrectamente, de manera que no converja en el caso base, se produce una recursividad “infinita”, con lo cual la memoria se agotará en un momento dado. Esto es analógico para el problema de un ciclo infinito en una solución iterativa (no recursiva). Tip de rendimiento: ● Evite los programas recursivos al estilo Fibonacci que produzcan una “explosión” exponencial de llamadas. ● Las llamadas recursivas requieren tiempo y consumen memoria
  • 21. Introducción a las funciones recursivas Ejemplo Calcular el factorial de un número utilizando recursividad /* Calcular el factorial de un número utilizando recursividad */ #include <iostream> using namespace std; //prototipo de función factorial long int factorial (int n); // parámetro n: ingreso del numero para calcular su factorial // valor devuelto: factorial del parámetro de entrada n int main (){ int n; //Leer la cantidad entera ingresada por el usuario cout<<"Calcula del factorial de un numero entero positivo"<<endl; do{ cout<<endl<<"Digite un Numero entero positivo: "; cin>>n; if(n<0) cout<<endl<<"-> error, ingreso valor negativo, intente de nuevo.."; }while(n<0); //Calcular y visualizar el factorial cout<<endl<<"RESULTADO de "<<n<<"! es "<< factorial(n); return 0; }
  • 22. Introducción a las funciones recursivas Ejemplo Calcular el factorial de un número utilizando recursividad /*************************************************************** * Calcular el factorial de un número utilizando recursividad * ****************************************************************/ //Definición de la función factorial long int factorial(int n){ if((n == 0) || (n == 1)){ return(1); } else{ /* Recursividad: Se vuelve a llamar la función factorial con un problema más simple: factorial del término anterior n-1 */ return (n * factorial(n-1)); } } //condición trivial: de retorno de función
  • 23. Introducción a las funciones recursivas Ejemplo Invertir una cadena utilizando recursividad
  • 24. Introducción a las funciones recursivas Ejemplo Invertir una cadena utilizando recursividad