【发布时间】:2019-04-07 07:11:39
【问题描述】:
我在 haskell 中编写了一个简单的函数,它是非尾递归的,它总结了列表中的值,其中:
nonTailRecursiveSum :: [Integer] -> Integer
nonTailRecursiveSum [] = 0 --base case
nonTailRecursiveSum (x:xs) = x + sum xs
但我现在要做的是实现相同的功能,但使用尾递归。据我所知,尾递归在最后一步执行递归调用,所以我尝试了类似的方法:
tailRecursiveSum :: [Integer] -> Integer
tailRecursiveSum [] = 0
tailRecursiveSum (x:xs) = aux_f(x) + tailRecursiveSum xs
.
.
但是我在中途迷路了,因为我不熟悉 Haskell 中的尾递归。任何人都可以帮助我继续代码的尾递归版本吗?
【问题讨论】:
-
sum (x:xs) = aux xs x其中aux (x:xs) total = aux xs (x + total) -
为了使递归成为尾递归,您需要您的案例类似于
tailRecursiveFunction something = tailRecursiveFunction somethingElse。
标签: haskell recursion tail-recursion