! use trampoline for recursive loop