I am trying to understand rpart all the details in rpart package. I am aware of the complexity parameter `cp`, which prevents a split if the *improvement* is less than `cp`

If I set `minbucket = 1`, `minsplit = 1` and `cp = -Inf` (or `cp = 0`) the tree should be allowed to grow to perfectly fit the data; provided that all the values of the predictor, or combination of predictors, are different. But it does not. 

There must be another parameter which is preventing some splits to be made since, as you can see in this image, data is not fitted perfectly. One can clearly see there are some leaves which have more than one element, as we see them *layered* in the lower part.

[![enter image description here][1]][1]

This is a MVE illustrating this issue, and generating the image above:

    set.seed(1)
    sample_size <- 1000
    y <- rgamma(sample_size, shape = 2, rate = 0.75)
    x <- rgamma(sample_size, shape = 0.5, rate = 2)
    
    library(rpart)
    md <- rpart(formula = y ~ x, data = data.frame(y,x), method = "anova", cp = -Inf, minbucket = 1, minsplit = 1)
    
    # All elements in x are unique:
    length(unique(x)) == sample_size
    
    #Number of leaves with more than one element:
    sum(md$frame[md$frame$var == "<leaf>", "n"] > 1)
    
    #Scatterplot
    plot(y, predict(md, newdata = data.frame(x)), xlab = "Observed", ylab = "Predicted", 
         col = scales::alpha("black", 0.2), pch = 16)

**Note:** For debugging purposes note that using `sample_size = 185` already produces a leaf with 2 values.

  [1]: https://i.sstatic.net/2la8C.png