【发布时间】:2012-11-08 04:39:05
【问题描述】:
我明天有一个计算机科学期中考试,我需要帮助确定这些递归函数的复杂性。我知道如何解决简单的情况,但我仍在努力学习如何解决这些更难的情况。这些只是我无法弄清楚的几个示例问题。任何帮助将不胜感激,并将极大地帮助我的学习,谢谢!
int recursiveFun1(int n)
{
if (n <= 0)
return 1;
else
return 1 + recursiveFun1(n-1);
}
int recursiveFun2(int n)
{
if (n <= 0)
return 1;
else
return 1 + recursiveFun2(n-5);
}
int recursiveFun3(int n)
{
if (n <= 0)
return 1;
else
return 1 + recursiveFun3(n/5);
}
void recursiveFun4(int n, int m, int o)
{
if (n <= 0)
{
printf("%d, %d\n",m, o);
}
else
{
recursiveFun4(n-1, m+1, o);
recursiveFun4(n-1, m, o+1);
}
}
int recursiveFun5(int n)
{
for (i = 0; i < n; i += 2) {
// do something
}
if (n <= 0)
return 1;
else
return 1 + recursiveFun5(n-5);
}
【问题讨论】:
-
如果不想每次都进行分析,有一种黑盒技术,叫做Master方法。但是假设输入的所有递归拆分在每个实例中都具有相同的大小。
-
描述 5 : O(f(n)) = T(n/2) ... T((n-5)/2) ... T((n-10)/ 2)...1 所以树的高度是 n/5。所以这会给你 O(f(n)) 需要 T((n/5 * n/2) - (5/2 *n/5)) 所以绑定在输入 n 上,在最坏的情况下递归情况会取 O(2^N)。在最佳情况和平均情况下也是如此。
标签: recursion big-o complexity-theory