1) Big-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)