محاسبهی توان به شیوهی بازگشتی
یکی از مسئلههایی که به کمک الگوریتمهای بازگشتی حل میشود، محاسبهی توان است.شیوههای مختلفی برای پیادهسازی بازگشتی توان وجود دارد.
پیادهسازی الگوریتمها
الگوریتم اول
- سادهترین الگوریتم بازگشتی برای محاسبهی توان، آن است که ابتدا $a^n/a$ را به صورت بازگشتی بهدست آوریم و سپس آن را در a ضرب کنیم تا مقدار $a^n$ بهدست آید.
- پیاده سازی این الگوریتم در زیر آمده است : (مشخص است که زمان اجرای این الگوریتم O(n) است.)
int power(double a, int n) { if (n == 0) return 1; return power(a,n-1)*a; }
الگوریتم دوم
- ایدهی الگوریتم دوم آن است که، برای محاسبهی $2^k\times2$ نیازی نیست که همهی توانهای کوچکتر از $2k$ را حساب کنیم. میتوان ابتدا $2^k$ را محاسبه کرد و سپس آن را به توان ۲ رساند.
- پیادهسازی این الگوریتم:
int power (double a, int n) { if (n == 0) return 1; if (n % 2 == 0) return pow (power(a,n/2),2); else return a*pow (power(a,n/2),2);
در هر مرحله از بازگشت، مقدار توان نصف میشود و بنابراین زمان کل اجرای الگوریتم، (O(log n است.