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

Jan Kacaba jan.kacaba at gmail.com
Sat Oct 1 18:29:25 CEST 2016


2016-10-01 18:02 GMT+02:00 David Winsemius <dwinsemius at comcast.net>:
>
>> 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)"?

Yes I meant that.

>> 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 function:
binary3 <- function(n) {
if(n > 1) {
   binary3(as.integer(n/2))
  }
   cat(n %% 2, ",")
 }

and call binary3(10) the console output is separated. So there must be
some kind of buffer and also it looks like there is some inconsistency
in how cat function behaves. Probably there is other explanation.



More information about the R-help mailing list