recursive composition