function <- function(p){ i <- 2 r <- 0 while(i < p) { q <- (p/i) while(q>=1) { q=(q-1) } if (q==0) { r=1 } else i=i+1 } return(r) } This function stays in some kind of loop when I enter 4 as a function value. It immediately returns 0 when I inter 3 though. I don't seem te get why it does not give me just a result. Can someone tell me why it stays in a loop? Kind regards, Michiel -- View this message in context: http://r.789695.n4.nabble.com/function-stays-in-loop-tp4651619.html Sent from the R help mailing list archive at Nabble.com.
Hello, Because p/i == 4/2 == 2 thenyou subtract 1 unil q == 0 and i = i+1 is never executed. (Use print statements to check it.) Hope this helps, Rui Barradas Em 02-12-2012 11:57, Mkkl escreveu:> function <- function(p){ > i <- 2 > r <- 0 > while(i < p) { > q <- (p/i) > while(q>=1) { > q=(q-1) > } > if (q==0) { > r=1 > } else > i=i+1 > } > return(r) > } > > This function stays in some kind of loop when I enter 4 as a function value. > It immediately returns 0 when I inter 3 though. > I don't seem te get why it does not give me just a result. Can someone tell > me why it stays in a loop? > > Kind regards, > > Michiel > > > > -- > View this message in context: http://r.789695.n4.nabble.com/function-stays-in-loop-tp4651619.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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.
On 12/02/2012 10:57 PM, Mkkl wrote:> function<- function(p){ > i<- 2 > r<- 0 > while(i< p) { > q<- (p/i) > while(q>=1) { > q=(q-1) > } > if (q==0) { > r=1 > } else > i=i+1 > } > return(r) > } > > This function stays in some kind of loop when I enter 4 as a function value. > It immediately returns 0 when I inter 3 though. > I don't seem te get why it does not give me just a result. Can someone tell > me why it stays in a loop? >Hi Michiel, Elementary really. You have programmed a Rube Goldberg test for whether a number is even or odd. If it returns, the number is odd, if it gets into an infinite loop. Play around with the initial value of i for more fun. Jim