トランポリン

https://qiita.com/41semicolon/items/985bdd2f551d9392463c
再帰をコールスタックを利用しない形に変換する手法のこと。
基本的なアイディアは、再帰呼び出しの代わりに「再帰呼び出しする関数」を戻り値として戻してやって、それを呼び出し側で再度呼び出すというもの。
再帰的に関数を呼び出す」を「再帰呼び出しするを返す関数、を何度も呼び出す」に変換することでコールスタックを深くしないという方法。
コールスタックをどんどん深くしていく再帰に対して、コールスタックを1つ深くして元の階層に戻る(関数の実行後に呼び出し元に戻る)ことを繰り返すことがトランポリンで何度もジャンプしているようなのでこのような名前がついている。
以下がサンプル。

// 通常の再帰
function HogeRecursive(n) {
	console.log(`output: ${n}`);
	if (n <= 0) { return -1; }
	return HogeRecursive(n-1);
}
console.log( HogeRecursive(5) ); // → output: 5, 4, 3, 2, 1, 0

// トランポリン処理
function HogeTrampoline(n) {
	console.log(`output: ${n}`);
	if (n <= 0) { return -1; }
	return () => HogeTrampoline(n-1);
}
var result = HogeTrampoline(5);
while (typeof result === 'function') {
	result = result(); // → output: 5, 4, 3, 2, 1, 0
}