Moze li mi ko napisati rekurzivnu funkciju za brzo stepenovanje u C++
Rekurzivna funkcija za brzo stepenovanje
// ova funkcija izracunava a ^ b
// a ^ b =
// ( a ^ ( b / 2 ) ) ^ 2 za b = 2 * k
// ( a ^ ( b - 1 ) ) * a za b = 2 * k + 1
int stepen( int a, int b )
{
if ( b == 0 )
return 1;
if ( b % 2 == 0 )
{
int tmp = stepen( a, b / 2 );
return tmp * tmp;
}
return stepen( a, b - 1 ) * a;
}
nisam testirao ali mislim da je dobro... :)
Kod je dobar ali moze i brze :)
int stepen( int a, int b )
{
if ( b == 0 )
return 1;
int tmp = stepen( a, b / 2 );
tmp *= tmp;
if ( b % 2 == 0 )
{
return tmp;
}
return tmp * a;
}
tvoj nije nista posebno brzi od njegovog samo ce imati nekoliko poziva funkcije manje, a slozenost je ista