Академический Документы
Профессиональный Документы
Культура Документы
Recursividad indirecta: cuando un mtodo P contiene dentro de si un llamado a otro mtodo Q que contiene llamados (directos o indirectos) a P.
Recursividad
Claudio Cubillos
Escuela de Ingeniera Informtica Pontificia Universidad Catlica de Valparaso, Chile claudio.cubillos@ucv.cl *Material realizado por el Prof. Franco Guidi
factorial( x ) =
x * factorial( x-1 ) 1
si x > 0 si x = 0
28/09/2010
28/09/2010
n=4
Condicin de trmino: Si n==0 se retorna 1. Convergencia hacia condicin de trmino: n se avecina a 0 en cada invocacin.
28/09/2010
Ejemplo 1
Plantear una funcin recursiva para calcular la suma de los N primeros enteros positivos. Anlisis: 1 Suma( N ) = N + Suma( N-1 )
... public static int suma(int n){ if( n == 1 ) return 1; else return n + suma( n-1 ); } ...
Ejemplo 1 (cont.)
si N = 1 si N > 1
Caso base
Suma(3)
Suma(2)
Suma(1)
Suma(4) 4+6=10
6
Suma(3) 3+3=3
3
Suma(2) 2+1=3
1
Suma(1)
28/09/2010
28/09/2010
10
Ejemplo 2
Calcular el n-simo numero de Fibonacci. Anlisis: 0 si N = 0 1 si N = 1 Fib(N-1) + Fib(N-2) si N > 1
Casos base
Ejemplo 2 (cont.)
Implementacin:
... public static int fibonacci(int n){ if( n <= 1 ) return n; else return fibonacci( n-1 ) + fibonacci( n-2 ); } ...
Fib(N) = Ejemplo:
Fib( 0 ) = 0 Fib( 1 ) = 1 Fib( 2 ) = Fib(1) + Fib(0) = 1 + 0 = 1 Fib( 3 ) = Fib(2) + Fib(1) = 1 + 1 = 2 Fib( 4) = Fib(3) + Fib(2) = 2 + 1 = 3
Franco Guidi Polanco (PUCV-EII) 28/09/2010 11 Franco Guidi Polanco (PUCV-EII) 28/09/2010 12
Ejemplo 2 (cont.)
Fib(1)
1 Fib(0) 0
Fib(1) Fib(2)
Fib(2) 1+0=1
1 Fib(1)
Fib(3)
Fib(3) 1+1=2
2 1 Fib(1) 1
Fib(0)
Fib(1)
Fib(4) 2+1=3
Fib(1)
1 Fib(0)
Fib(2) 1+0=1
0
Fib(0)
13
28/09/2010