recursive patterns