El arte de programar en R Un leguaje para la estadística - page 72

CAPÍTULO 4. ESTRUCTURAS DE CONTROL Y MANEJO DE DATOS 69
los números de fibbonacci, que, tenidos o dados los dos primeros números de
fibbonacci, F
0
y F
1
, definidos ambos como 1, calcula cada uno de los siguientes
como la suma de los dos anteriores.
# Primero se crea la función:
fibbonacci
<-
function
(
n
) {
if
(n
%in%
c
(
0
,
1
))
return
(
1
)
F0
<-
1
; F1
<-
1
; i
<-
2
repeat
{
s
<-
F0
+
F1
# Suma de los fib anteriores
if
(i
==
n)
# Ya es el que se busca
return
(s)
# Sale hasta afuera de la función
# recorremos los últimos dos próximos números
F0
<-
F1
F1
<-
s
i
<-
i
+
1
# incrementamos el índice
}
}
# El octavo número de fibbonacci se genera
# llamando a la función así:
fibbonacci
(
8
)
## [1] 34
Esta función utiliza el operador
%in %
, que identifica si un cierto elemento
está dentro de un conjunto representado por un vector
3
. La instrucción
return
,
es una función primitiva que termina la ejecución de una función y entrega co-
mo resultado de la función el argumento que se le pase. En el caso del ejemplo,
se ha usado dos veces: la primera, simplemente detecta si el argumento es
0
o
1
, en cuyo caso termina la función y entrega
1
como resultado; la segunda vez,
que es la que nos interesa, se usa dentro de la instrucción
repeat
para deter-
minar si ya se ha llegado al número fibbonacci correspondiente, en cuyo caso
termina allí la función y entrega como resultado el número correspondiente.
La instrucción
next
interrumpe el flujo normal de ejecución de un progra-
ma de una manera diferente: en vez de salir de un ciclo, solamente impide
la ejecución de las instrucciones
siguientes
y regresa al principio del ciclo para
ejecutar la siguiente iteración. El siguiente ejemplo ilustra esta operación:
3
En realidad este operador puede emplearse para probar si cada uno de los elementos de un
vector, están contenidos en el conjunto representado por otro vector; por ejemplo:
c(2,3,4) %in %
c(2,4,6,8,10)
, entregaría,
TRUE FALSE TRUE
.
1...,62,63,64,65,66,67,68,69,70,71 73,74,75,76,77,78,79,80,81,82,...198
Powered by FlippingBook