明天我有計算機科學中期,我需要幫助來確定這些遞歸函數的複雜性。我知道如何解決簡單的案例,但我仍在努力學習如何解決這些困難的案例。這些只是我無法弄清楚的一些示例問題。任何幫助將不勝感激,並會對我的學習有很大幫助,謝謝!確定遞歸函數的複雜性(大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