Przejdź do głównej zawartości

Rekurencyjny algorytm szybkiego potęgowania O(log n)

/* 
 Title: Rekurencyjny algorytm szybkiego potęgowania o złożoności O(log n) 
*/

#include <stdio.h>

int potegowanie(int podstawa, int wykladnik);

int main()
{
 int wynik = potegowanie( 2, 6 ); /* 2^6 */
 printf( "Wynik potegowania 2^6: %i\n", wynik ); /* Wynik 64 */
 return 0;
}

int potegowanie( int podstawa, int wykladnik )
{
 if( wykladnik == 0 ) /* Potęgowanie podstawy o wykładniku równym 0 */
 {
  return 1;
 }
 else if( wykladnik % 2 == 1 ) /* Dla wykładnika nieparzystego */
 {
  return podstawa * potegowanie( podstawa , wykladnik - 1 );
 }
 else /* Dla wykładnika parzystego */ 
 {
  return potegowanie( podstawa * podstawa, wykladnik / 2 );
 } 
}

Komentarze

Popularne posty z tego bloga

Funkcja, Makro, MsgBox, InputBox i równanie funkcji.

Napisać funkcję użytkownika , która opisuje podaną zależność           | x + a     dla  -a <= x <= 0 f(x) = | -x + a    dla   0 <= x <= a           a > 0           | 0           dla pozostałych x Zastosować funkcję w arkuszu. Następnie napisać procedurę przypisaną do obiektu w arkuszu, która dla zadanych wartości a oraz x wprowadzanych przez użytkownika wywołuje funkcję i wyświetla wynik w oknie MsgBox . Umieścić w arkuszu okno InputBox lub kontrolki do wprowadzania wartości wejściowych. Funkcja: Function Funkcja(a As Integer, x As Integer) If -a <= x And x <= 0 Then Funkcja = x + a ElseIf x >= 0 And x <= a Then Funkcja = (-x) + a Else Funkcja = 0 End If End Function Makro:   Sub Makro1() Dim x As Integer, a As Integer x = InputBox("Podaj x", "Podaj x") a = I...