例如,由于以下函数没有累加器,它仍然是尾递归吗?
belong:: (Ord a) => a -> [a] -> Bool
belong a [] = False
belong a (h:t)
| a == h = True
| otherwise = belong a t
函数中的所有计算都在递归调用之前处理,这是被视为尾递归的充分条件吗?
尾递归不一定需要累加器。累加器在尾递归中用作通过递归调用链向下传递部分结果的一种方式,而不需要在递归的每个级别使用额外的空间。例如,规范尾递归阶乘函数需要一个累加器来传播到目前为止建立的部分积。但是,如果您不需要从递归调用向下传递任何信息到其子调用,则不需要累加器。
您提供的函数确实是尾递归的,但它不需要或使用累加器。当在列表中搜索元素时,递归不需要记住到目前为止它所查看的所有元素都不等于正在搜索的特定元素。它只需要知道要查找什么元素以及要搜索什么列表。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)