recursive cp