data Tree = Leaf Int | Branch Tree Tree
sumt (Leaf i) acc = i + acc
sumt (Branch l r) acc = sumt l (sumt r acc)
sumt
处于尾部位置,但它也在累加器中。我倾向于否,因为它必须评估对sumt
的内部调用(使用调用堆栈),但我可以看到为什么它可能是尾递归的,因为最后一个函数调用是sumt
。 fibsumt
显然是尾递归的,即使acc函数创建了一个深度调用堆栈。
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
fibsumt 0 acc = acc
fibsumt n acc = fibsumt (n - 1) (acc + (fib n))
sumt
被归类为尾递归函数吗?