1)尽管我已经研究过大 O 表示法,但我无法理解我们如何根据 Big-O 表示法计算该函数的时间复杂度。能不能详细解释一下。
2) 对于递归函数;为什么我们在使用递归函数时调用 len-2 ?
bool isPalindrome( char *s, int len) {
if (len <= 1) {
return true;
}
else
return ((s[0] == s[len-1]) && isPalindrome(s+1,len-2));
}
就 Big-O 表示法而言,这个函数的时间复杂度是多少?
T(0) = 1 // base case
T(1) = 1 // base case
T(n) = 1 + T(n-2)// general case
T(n-2)=1+T(n-4)
T(n) = 2 + T(n-4)
T(n) = 3 + T(n-6)
T(n) = k + T(n-2k) ... n-2k = 1 k= (n-1)/2
T(n) = (n-1)/2 + T(1) O(n)