递归函数的运行时

时间:2018-09-12 05:15:32

标签: algorithm recursion erlang runtime time-complexity

我正在尝试查找此函数的运行时:

myst_fun_1([]) -> 0;
myst_fun_1(ListUsed = [_ | Tail]) -> length(ListUsed) + myst_fun_1(Tail).

由于此长度函数为O(N),并且myst_fun_1被调用了N次,运行时间是否为O(N^2)?我想知道我的理解是否正确。

2 个答案:

答案 0 :(得分:1)

myst_fun_1([]) -> 0;

myst_fun_1(ListUsed) -> 
    myst_fun_1(length(ListUsed), ListUsed).

myst_fun_1(Length, [_ | Tail]) ->
    Length + myst_fun_1(Length-1, Tail).

O(N)

答案 1 :(得分:-2)

length/1是一个BIF,运行速度比myst_fun_1/1快得多,因此它比O(N ^ 2)更有可能是O(N)。