我唯一能想到的就是使用Math.pow()在循环之前计算n并且看起来像个警察。
在这个例子中C = 2:
var oCN = function (n)
{
var j = Math.pow(2, n);
for (var i = 0; i <= j; i++) {
console.log('cactus');
};
return;
}
答案 0 :(得分:2)
像这样的递归算法会相对于n
呈指数级增长:
var oCN = function (C, n)
{
if (n < 1) { console.log('cactus'); return; }
for (var i = 0; i < C; i++) {
oCN(C, n-1);
}
}
在此算法的情况下,记录的仙人掌数量正好是C^n
,当然是O(C^n)
。例如。 oCN(2, 4)
记录cactus
16次,oCN(2, 5)
记录32次,等等。
您通常不会看到很多日常算法在指数时间内工作。如果某些 在指数时间内完成,那么输入大小或常数很可能使得大O复杂度根本不重要(或者至少,实现者没有'非常关心)所以你可能不会坐在那里分析复杂性。程序员想做的大多数正常工作都可以通过多项式时间算法完成,也可以通过一些捏造和牺牲来实现。