递归函数的运行时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归函数的运行时相关的知识,希望对你有一定的参考价值。

我试图找到这个函数的运行时:

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

由于这个长度函数是O(N)myst_fun_1被称为N次,运行时会是O(N^2)吗?我想知道我的理解是否正确。

答案
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).

联系(I)

另一答案

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

以上是关于递归函数的运行时的主要内容,如果未能解决你的问题,请参考以下文章

使用带数组的find_if()时代码段出错

运行时代码覆盖工具

c#:运行时代码分析 - 任何现有的库?

csharp 使用表达式树生成运行时代码(对象比较器)

当管理员用户使用 Rdp 登录服务器时代码运行

验证码和判断回文(递归)