明天我有计算机科学中期,我需要帮助来确定这些递归函数的复杂性。我知道如何解决简单的案例,但我仍在努力学习如何解决这些困难的案例。这些只是我无法弄清楚的一些示例问题。任何帮助将不胜感激,并会对我的学习有很大帮助,谢谢!确定递归函数的复杂性(大O表示法)
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方法的黑盒技术。但是假设所有输入的递归分割在每种情况下都具有相同的大小。 –
[算法分析的大师定理](https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)) – RBT