Niente, era R(n) = cn^4+R(n/2) se il for era scritto così:
codice:
for(int i=0;i<= x*x*x*x;i++)
a+=i;
Questo semplicemente perchè il for viene eseguito x^4 volte.
Quello che devi fare per calcolare una relazione di ricorrenza è esaminare tutti i possibili casi (es: per quale valore termina la funzione? cosa succede se n ha un determinato valore?).In una funzione come questa i casi sono due: n<=0 e n>0.
Poi assegni i costi alle singole operazioni.Puoi anche a meno di assegnare il costo di un ciclo for, puoi assegnare il costo semplicemente al corpo del for.
Poi vedi quante volte viene eseguita quella singola istruzione a cui hai assegnato il costo.Se la funzione è ricorsiva aggiungi anche il costo della chiamata ricorsiva.
Esempio:
codice:
int f(int x)
{
if(x==0)
return 1;
else
{
int sum=0;
for(int i=0;i<x;i++)
sum+=i;
return sum+f(x/2);
}
}
Allora assegnando un costo costante al corpo del for che chiamo c, distingui due casi:
T(f(x))=1 se x=0
T(f(x))=xc+T(x/2) se x>1
E dalla relazione di ricorrenza sei in grado di calcolarti la complessità.