【发布时间】:2017-03-25 12:16:13
【问题描述】:
我从不喜欢玩弄定义,尤其是在面试时。 据我所知:
编辑:
尾递归函数是在递归调用后不再进行任何计算的函数。
我认为第二个不是尾递归,因为它根本不进行递归调用,因此不是尾递归。
但是第一个是尾递归的,即使它进行了 2 次递归调用,之后它也没有做任何事情,所以我想我在这里正确使用了尾递归的定义。
let rec func x =
if x > 10 then x else func (func (x+1))
let f a b = a + b
【问题讨论】:
-
请标记语言。
-
请再看我的回答,我已经更正了
-
内部 func 调用不在尾部位置,因此 func 不是尾部递归
-
一个更少的格式定义是尾递归可以表示为goto。在
func (func (x+1))中,内部func不能作为goto 完成,而外部可以。请注意,在 f 中没有递归,但您有一个尾调用。a + b可以表示为转到+函数。
标签: ocaml tail-recursion