trail recursive