Está en la página 1de 17

Universidad Autónoma Gabriel Rene Moreno

Facultad de Ingeniería en Ciencias de la Computación y


Telecomunicaciones

Capitulo 1
1.2 Recursiones Numéricas

Semestre I/2020 Ing. Mary Dunnia López N.


Ejer1. Resolver el factorial de un numero entero

1. Analizar el algoritmo recursivo para el calculo del


factorial.
2. Diseñar el proceso o función mediante un algoritmo del tipo
recursivo; especificando el Caso base y el Caso general
3. Validar la funcionalidad del algoritmo.     
[Análisis] [Diseño]
01

04 02

03 [Codificación]
[Prueba]

¿Cuál es el proceso?
1. Análisis 2. Diseño
A. Perfil del método
• Para calcular el factorial de 4 i.Función : Identificar si va ser proceso o función.
ii.Parámetros
1.Entrada: n -> Variable entera
2.Salida: Tipo de dato (variable) que retorna la Función
4! = 4 * (4-1)! = 24 Int num = Factorial ( int n)
B. Análisis de casos
3! = 3 * (3-1)! = 6 i.Caso Base : El algoritmo no se llama a si mismo para resolver el
problema. Este es el punto de parada de la recursión.
0! = 1 --> Este es el caso base
2! = 2 * (2-1)! = 2 ii.Caso General : El método se llama a si mismo para resolver el
problema. Este es el  punto de repetición del algoritmo.
1! = 1 * (1-1)! = 1

{
1 n=0 ;
 
n * factorial (n-1) n>0
0! = 1 Factorial (n)

C. Codificación en C++
3. Codificación

int factorial(int n){


if(n==0){
return 1;
}else{
int res= n*factorial(n-1);
return res;
}

4. Prueba

1 1

2 2

3 3

4
4
Caso Base
Ejer2. Contar los dígitos de un número entero

1. Analizar el algoritmo recursivo para contar los


dígitos de un numero entero en base 10.
2. Diseñar un proceso o función tipo recursivo especificando el Caso
base y el Caso general
3. Validar la funcionalidad del algoritmo.
[Análisis] [Diseño]
01

04 02

03 [Codificación]
[Prueba]

¿Cuál es el proceso?
1. Análisis 2. Diseño
A. Perfil del método
• Para contar los dígitos, se i.Función : Identificar si va ser proceso o función.
puede realizar divisiones ii.Parámetros
sucesivas entre la base que 1.Entrada: num -> Variable entera
es 10 hasta llegar a un 2.Salida: Tipo de dato (variable) que retorna la Función
residuo menor a 10. Int ndig = CuentaDig( int num)
B. Análisis de casos
• El numero de veces que se i.Caso Base : El algoritmo no se llama a si mismo para resolver el
divida mas uno indicará la problema. Este es el punto de parada de la recursión.
cantidad de dígitos que el Si num < 10  Solo tiene un digito  Este es el caso base
numero tiene. ii.Caso General : El método se llama a si mismo para resolver el
problema. Este es el punto
  de repetición del algoritmo.
501 => Cuantos dígitos ?

{
1 num<10 ;
501 / 10 =50  
CuentaDig(num/10) num>=10
50 / 10 =5 CuentaDig (num)

• Se dividió entre el 10, dos


veces ;luego tiene 2+1 dígitos. C. Codificación en C++
3. Codificación

int CuentaDig(int num){


if(num<10){
return 1;
}else{
int res= CuentaDig(num/10);
res=res+1;
return res;
}

4. Prueba
3

P a s o5
1 R e t or n a 3 1

N um = 5 4 6
C ue nt a D i g (n um / 1 0 ) + 1

2 P a s o1
2
P a s o4
R e t or n a 2

N um = 5 4
C ue nt a D i g (n um / 1 0 ) + 1

3 P a s o2 3
P a so3
R e t or n a 1
Num= 5 Caso Base
1
Ejer3. Segmentar los dígitos de un numero en base 10. Los
pares a la derecha y los impares a la izquierda.

1. Analizar el algoritmo recursivo segmentar los dígitos


de un numero en base 10.
2. Diseñar el proceso o función mediante un algoritmo del tipo
recursivo; especificando el Caso base y el Caso general
3. Validar la funcionalidad del algoritmo.
[Análisis] [Diseño]
01

04 02

03 [Codificación]
[Prueba]

¿Cuál es el proceso?
1. Análisis
2. Diseño
3. Codificación
unsigned int PartirPi(unsigned int nro){
if (nro<10)
return nro ;
else{
unsigned int res=PartirPi(nro/10);
unsigned int dig=nro%10;
if (dig%2==0)
dig=res*10+dig;
else {
int tot;
tot=ContarDig(res);
dig=dig*pow(10,tot)+res;
}
return dig;
}
}
4. Prueba

1
1

2
2

3 3

4
4
Caso Base

También podría gustarte