下面的代码有多复杂?

时间:2015-07-04 23:10:55

标签: c++ time-complexity

有人可以帮我找出以下代码的复杂性吗?

#include<iostream>
#include<string.h>
using namespace std;
//finding the factorial value
int fact(int n)
{
    return (n<=1)?1 : n*fact(n-1);
}

int fun(char *str)
{
    int rank=1;
    int len=strlen(str);

    for (int i=0;str[i]!='\0';i++)
    {    
        int count=0;
        //finding characters smaller than str[i]
        for(int j=i+1;str[j]!='\0';j++)
        {
            if(str[j]<str[i])
            count++;
        }

        len--;
        //finding the rank
        rank+=count*fact(len);
    }
    return rank;
}

int main()
{
    char str[]="string";
    cout<<endl<<fun(str);
    return 0;
}

我认为这是O(n ^ 2)。

1 个答案:

答案 0 :(得分:2)

阶乘函数是O(n),fun是O(n ^ 2)所以实际上它总是O(n ^ 2)。