> -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of Nordlund, > Dan (DSHS/RDA) > Sent: Thursday, April 21, 2011 9:19 AM > To: r-help@r-project.org > Subject: Re: [R] Fibonacci > > > -----Original Message----- > > From: r-help-boun...@r-project.org [mailto:r-help-bounces@r- > > project.org] On Behalf Of David Winsemius > > Sent: Thursday, April 21, 2011 8:44 AM > > To: Michael Dewey > > Cc: r-help@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 > > > i...@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@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. > ______________________________________________ R-help@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.