计算以下递归函数的时间和空间复杂度(Big O表示法)的最直观方法是什么?
function count(str) {
if (str.length <= 1) {
return 1;
}
var firstTwoDigits = parseInt(str.slice(0, 2), 10);
if (firstTwoDigits <= 26) {
return count(str.slice(1)) +
count(str.slice(2));
}
return count(str.slice(1));
}
答案 0 :(得分:4)
为我的热门答案道歉,您的代码的复杂性似乎是
在最坏的情况下,O(2 ^ N)或 O(2 ^ N-1)是准确的。
所以,如果
N = str.length ;//number of iteration
在最糟糕的情况下,您的str
包含1或2的所有N个数字。
然后,如果 N是20 开始,那么它将产生另外两个递归调用 N = 18 和 N = 19 ,
然后, N = 19 将产生两个以上的呼叫(因此,一个直到N的值为0)
因此,每次迭代时调用次数将呈指数增长),因此达到值(2 ^ N - 1)。