[R] strange output of cat function used in recursive function

David Winsemius dwinsemius at comcast.net
Sat Oct 1 18:02:03 CEST 2016


> On Oct 1, 2016, at 8:44 AM, Jan Kacaba <jan.kacaba at gmail.com> wrote:
> 
> Hello Dear R-help
> 
> I  tried to understand how recursive programming works in R. Bellow is
> simple recursive function.
> 
> binary1 <- function(n) {
>  if(n > 1) {
>    binary(as.integer(n/2))
>  }
>  cat(n %% 2)
> }

Did you mean to type "binary1(as.integer(n)"?

> When I call binary1(10) I get 1010. I believe that cat function stores
> value to a buffer appending values as recursion proceeds and at the
> end it prints the buffer. Am I right?

No. Read the ?cat help page. It returns NULL. The material you see at the console is a side-effect.
> 
> I tried to modify the function to get some understanding:
> 
> binary2 <- function(n) {
>  if(n > 1) {
>    binary2(as.integer(n/2))
>  }
>  cat(n %% 2, sep=",")
> }
> 
> With call binary2(10) I get also 1010. Why the output is not separated
> by commas?

I think because there is nothing to separate when it prints (since there was no "buffer".

> 
> If I use in binary2 function cat(n %% 2, ",") on last line, the output
> is separated. Outside recursive function the cat function prints
> separated output in both cases e.g. cat(c(1:10), sep=",") and
> cat(c(1:10), ",")
> 
> Derek
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list