Mam jutro naukę w zakresie informatyki i potrzebuję pomocy w określeniu złożoności tych funkcji rekursywnych. Wiem, jak rozwiązywać proste przypadki, ale nadal próbuję nauczyć się rozwiązywać te trudniejsze sprawy. To tylko kilka przykładów problemów, których nie mogłem wymyślić. Każda pomoc byłaby bardzo cenna i bardzo pomogłaby w moich studiach, dziękuję!Określanie złożoności dla funkcji rekursywnych (notacja Big 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);
}
Jeśli nie chcesz analizować za każdym razem, istnieje technika czarnej skrzynki nazywana metodą Master. Ale przy założeniu, że wszystkie rekurencyjne podziały wejść są jednakowej wielkości w każdym przypadku. –
[Twierdzenie główne do analizy algorytmów] (https://en.wikipedia.org/wiki/Master_theorem_ (analysis_of_algorithms)) – RBT