cha*_*Lgn 5 algorithm optimization recursion ocaml
我在学校有一些Ocaml课程,为了练习,我们必须编写函数长度.
我的老师向我们展示了Xavier Leroy如何编写他的功能:
let rec length_aux len = function
[] -> len
| a::l -> length_aux (len + 1) l
let length l = length_aux 0 l
Run Code Online (Sandbox Code Playgroud)
当我的老师向我们解释他为什么这样做长度函数时,他说他不知道为什么Xavier Leroy没有写:
let rec length_aux len = function
a::l -> length_aux (len + 1) l
| [] -> len
let length l = length_aux 0 l
Run Code Online (Sandbox Code Playgroud)
...为了使它更快(因为大多数情况下列表是非空的).
所以如果有人知道为什么第二个并不比第一个好,你能回答我吗?
谢谢.
对于OCaml,这是相同的功能.模式匹配将被编译为测试列表是否为空,并跳转到一侧或另一侧.
C中的类似代码将在switch语句中重新排序.