1.下面函数的复杂度是:
long foo(long x){
if(x<2) return 1;
return x*x*foo(x-1);
}
解析:
当n>=2时
foo(n)=n^2*foo(n-1)=n^2*(n-1)^2*foo(n-2)=...=n^2*(n-1)^2*...*2*foo(1);
递归n-1步,时间复杂度为O(n)。
2.对于移动平均算法,是计算某变量之前n个数值的算术平均,正确的说法是:A
A.空间复杂度是O(1)
B.空间复杂度是O(n)
C.空间复杂度是O(logn)
D.空间复杂度是O(nlogn)
解释:
注意算的是空间复杂度
任何一个算法不同情况下可能有多种解法,一般我们以时间复杂度为评判的话,就会用牺牲空间换时间。
这个算法最明显的有两种解法,
1.每次进来一个变量n,就遍历前面n个数,然后求和,再取平均,这样的话时间复杂度为O(n),空间为O(1);
2.以空间换时间:从前往后没计算一次保留一次求和值到一个辅助空间,这样计算下一个的时候直接取得前一个和值加上当前数,再取平均得到当前平均,这样的话时间复杂度为O(1),空间为O(n)