Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Algorytm Potęgowania
Vengeance
post
Post #1





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Kod
<?php
echo potega();
function potega()
{
  global $zmienna;
  static $wynik=1;
  static $x = 4;
  static $k = 10;
  if($k<>0)
  {
     if(is_int($k/2))
     {
        $k /= 2;
        $x *= $x;
     }
     else
     {
        $wynik *= $x;
        $k--;
     }
     potega();
  }
  else
     return (string)$wynik;
}
?>


Jest to rekurencyjna funkcja do potęgowania napisana wg. jakiegoś tam algorytmu (było takie zadanie na jakieś olimpiadzie czy coś aby taką napisać).

Teraz pytanie. Jak to przerobić abym mógł przekazać podstawe i wykładnik jako parametry funkcji ? Bo przy:
Kod
static $x = $param1;


php robi error o zły T_VARIABLE.

PS> do nabijaczy postów ;] wiem, że istnieje funkcja pow()

Ten post edytował Vengeance 13.08.2004, 01:31:18
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




a dokładniej mówiąc, np. tak? (bez żadnej rekurencji...)
  1. <?php
  2.  
  3. function potega( $fPodstawa , $iWykladnik )
  4. {
  5. if( $iWykladnik == 0 )
  6. {
  7. return 1;
  8. }
  9. if( $iWykladnik < 0 )
  10. {
  11. $bObroc = true;
  12. $iWykladnik *= -1; // wartość bezwzględna;) 
  13. }
  14.  
  15. $fWynik = $fPodstawa;
  16. for( $i=1; $i < $iWykladnik; $i++ )
  17. {
  18. $fWynik *= $fPodstawa;
  19. }
  20.  
  21. if( isset( $bObroc ) )
  22. {
  23. return 1/$fWynik ;
  24. }
  25. return $fWynik; 
  26. }
  27.  
  28. echo potega( 2, -);
  29. ?>


@Orson: zazwyczaj na olimpiadach nie ma podanego z góry algorytmu, tak więc wszystko zależy od piszącego, chyba że... podany jest sposób przesyłania parametrów do funkcji. Ale nawet wtedy można próbować to ominąć, szczególnie w przypadku takim jak ten, gdzie założenie jest całkowicie absurdalne.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 19:24