[R] Fibonacci
William Dunlap
wdunlap at tibco.com
Thu Apr 21 18:59:00 CEST 2011
> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org] On Behalf Of Nordlund,
> Dan (DSHS/RDA)
> Sent: Thursday, April 21, 2011 9:19 AM
> To: r-help at r-project.org
> Subject: Re: [R] Fibonacci
>
> > -----Original Message-----
> > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> > project.org] On Behalf Of David Winsemius
> > Sent: Thursday, April 21, 2011 8:44 AM
> > To: Michael Dewey
> > Cc: r-help at r-project.org
> > Subject: Re: [R] Fibonacci
> >
> >
> > On Apr 21, 2011, at 9:04 AM, Michael Dewey wrote:
> >
> > > At 10:42 20/04/2011, Georgina Imberger wrote:
> > >> Hi!
> > >>
> > >> I am trying to work out the code to get a Fibonacci
> sequence, using
> > >> the
> > >> while() loop and only one variable. And I can't figure it out.
> > >
> > >
> > > > phi <- 0.5 * (1 + sqrt(5))
> > > > phi
> > > [1] 1.618034
> > > > fib <- function(n) {(phi ^ n - (1 - phi) ^ n) / sqrt(5)}
> > > > fib(1:10)
> > > [1] 1 1 2 3 5 8 13 21 34 55
> > > >
> > >
> > > Admittedly this does not use a while loop as you requested
> >
> > I like it!
> >
> > > test <-c( 1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
> > > test == fib(1:10)
> > [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> >
> > To avoid such FAQ-tual puzzlement, it might be better to
> round to zero
> > digits:
> >
> > fib2 <- function(n) {round( (phi ^ n - (1 - phi) ^ n) / sqrt(5) ) }
> >
> > > test == fib2(1:10)
> > [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
If you are going to round anyway, you can save time and
add puzzlement by leaving out the (1-phi)^n term:
> fib3 <- function(n) {round( (phi ^ n) / sqrt(5) ) }
> all(fib2(0:100) == fib3(0:100))
[1] TRUE
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
> >
> >
> > There are several packages that offer fib() functions of one name or
> > another, including the gmp package which always seems to "think
> > bigger" than I do. I cannot (trivially) see how that author does it
> > with fibnum(), because it is in a .Call()
> >
> > --
> > David
> > >
> > > Courtesy of Wikipedia
> > >
> > >
> > >> Fibonacci<-c(1,1)
> > >> while (max(Fibonacci)<500){
> > >> Fibonacci<-c(Fibonacci, (max(Fibonacci) + ?(Fibanacci)))
> > >> }
> > >>
> > >>
> > >> How can I tell R to take the value one before the max value?
> > (Without
> > >> defining another variable)
> > >>
> > >> (Probably super easy... I am a beginner...)
> > >>
> > >> Thanks,
> > >> Georgie
> > >>
> > >> [[alternative HTML version deleted]]
> > >
> > > Michael Dewey
> > > info at aghmed.fsnet.co.uk
> > > http://www.aghmed.fsnet.co.uk/home.html
> > >
>
> I, too, like the Michael/David/Wikipedia solution. But if
> this is homework, I would recommend using length() instead of
> max() for getting the last two items of the vector.
>
> Hope this is helpful,
>
> Dan
>
> Daniel J. Nordlund
> Washington State Department of Social and Health Services
> Planning, Performance, and Accountability
> Research and Data Analysis Division
> Olympia, WA 98504-5204
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list