有人可以帮我找出以下代码的复杂性吗?
#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)。
答案 0 :(得分:2)
阶乘函数是O(n),fun是O(n ^ 2)所以实际上它总是O(n ^ 2)。