recursive optimization