Академический Документы
Профессиональный Документы
Культура Документы
lenguaje C
TAKASHI SUGASAWA
Funciones recursivas
Se dice que una funcin es recursiva, si se llama a s misma.
Funcin recursiva es uno de los temas que son difciles de entender en el campo
de programacin.
Un ejemplo de la funcin recursiva, que calcula la factorial de un valor:
factorial.c
#include <stdio.h>
unsigned int factorial(unsigned int n)
{
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
1)
}
Versi
Versin no recursiva
unsigned int factorial(unsigned int n)
{
int resultado = 1;
int i;
if (n >= 2) {
for (i = 2; i <= n; i++)
resultado *= i;
}
return resultado;
main()
{
}
unsigned int i;
for (i = 0; i <= 12; i++)
printf("%d! = %d\n", i, factorial(i));
}
n! = n x (n-1) x ... x 2 x 1
= n x (n-1)!
(n-1)!
Cmo se ejecuta ?
En el caso de i=4 ...
main()
factorial(4)
1
8
4*6=24
factorioal(4)
return 4 * factorial(3);
2
factorioal(3)
3*2=6
return 3 * factorial(2);
3
factorioal(2)
2*1=2
return 2 * factorial(1);
4
factorioal(1)
return 1;
Ejercicio9a
En matemticas, un nmero de Fibonacci forma una sucesin
definida recursivamente por:
F (1) = 1
F (2 ) = 1
F (n ) = F (n 1) + F (n 2 )
Resultado
F(1): 1
F(2): 1
F(3): 2
F(4): 3
F(5): 5
F(6): 8
F(7): 13
F(8): 21
F(9): 34
F(10): 55
F(11): 89
F(12): 144
F(13): 233
F(14): 377
F(15): 610
F(16): 987
F(17): 1597
F(18): 2584
F(19): 4181
F(20): 6765
6
Ejercicio10a
Solucione el problema Torre de Hanoi usando algoritmo recursivo.
A
1
En el caso de 3 discos...
B
2
Disco1: AJB
2
1
Disco2: AJC
Disco1: BJC
Disco3: AJB
Disco1: CJA
Disco2: CJB
Disco1: AJB
Necesita 7 pasos al mnimo.
Si la solucin del caso de n-1 discos est ya conocido, el case de n discos se puede
resolve como sigue.
B
2
n-1
n
n-1
n
1
n
1
n-1
n-1
n
Programacin del lenguaje C (9. Funciones recursivas)
Destino
Otro
10
Resultado
disco1:
disco2:
disco1:
disco3:
disco1:
disco2:
disco1:
disco4:
disco1:
disco2:
disco1:
disco3:
disco1:
disco2:
disco1:
disco5:
disco1:
disco2:
disco1:
disco3:
disco1:
disco2:
disco1:
disco4:
disco1:
disco2:
disco1:
disco3:
disco1:
disco2:
disco1:
A
A
B
A
C
C
A
A
B
B
C
B
A
A
B
A
C
C
A
C
B
B
C
C
A
A
B
A
C
C
A
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
B
C
C
B
A
B
B
C
C
A
A
C
B
C
C
B
A
B
B
A
C
A
A
B
B
C
C
B
A
B
B
12
15