#include /* T(n)=T(n-1)+c => O(n)*/ float stepen1(float x, int a){ if(a==0) return 1; return x*stepen1(x,(a-1)); } float stepen2(float x, int a){ float t; if(a==0) return 1; if(a%2==0){ t=stepen2(x,a/2); return t*t; }else{ return x*stepen2(x,a-1); } } /* T(n) = 2*T(n/2)+c prema master teoremi a=2, b=2, k=0 u formi T(n)=a*T(n/b)+c*n^k pa je slozenost O(n^(log_b(a)))=O(n^1)=O(n), znaci nema poboljsanja */ float stepen3(float x, int a){ if(a==0) return 1; if(a%2) return stepen3(x,a/2)*stepen3(x,a/2)*x; else return stepen3(x,a/2)*stepen3(x,a/2); } /* T(n)=T(n/2)+c T(n/2)=T(n/4)+c .. T(1)=T(0)+c T(0)=c ---------- + T(n)=log_2(n)*c=O(log(n)) */ float stepen4(float x, int a){ float t; if(a==0) return 1; t=stepen4(x,a/2); /* celobrojno deljenje a/2 */ if(a%2) return t*t*x; else return t*t; } int main(){ printf("%f %f %f %f\n",stepen1(2,11),stepen2(2,11),stepen3(2,11),stepen4(2,11)); return 0; }