这是尾递归吗?新边缘案例

时间:2018-04-10 06:01:18

标签: haskell tail-recursion

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的内部调用(使用调用堆栈),但我可以看到为什么它可能是尾递归的,因为最后一个函数调用是sumtfibsumt显然是尾递归的,即使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被归类为尾递归函数吗?

0 个答案:

没有答案