public static int Sum(Stack <int> intStack) { var recursiveTailSum = Trampoline.MakeTrampoline((int acc, Stack <int> ints) => { var topInt = ints.Pop(); var total = topInt + acc; return(ints.Any() ? Trampoline.Recurse <int, Stack <int>, int>(total, ints) : Trampoline.ReturnResult <int, Stack <int>, int>(total)); }); return(recursiveTailSum(0, intStack)); }