Tässä yksinkertainen ja nopea rekursiivinen funktio luvun kertoman laskemiseen.
Luvun kertoma on luku * luku-1, luku - 1 > 1
Esimerkiksi luvun 9 kertoma on 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
Tämä funktio on hyvin nopea, se laskee esimerkiksi luvun 170 kertoman (7.257415615308E+306, suurin kertoma jonka pystyy näillä konfiguroinneilla laskemaan, joku limitti iskee vastaan ku suuremmissa tule 1.#INF) kutakuinkin samassa ajassa kuin tietokoneen laskin (en osaa sanoa tarkasti, eroa ei ainakaan silmällä näe). Hidastavana riippakivenä perässä oikeastaan roikkuu Mozilla Firefox, mikä sekään ei kovin hidas ole.
<?php function rekursio($n, $i) { $i--; // Vähennetään $i:stä jokaisen kierroksen //aluksi 1. Tulos muodostuu lopulta arvosta luku * $i $n = $n * $i; // Kerrotaan luku $n $i:llä ($n * $i) if ($i > 2) { // Jos $i on suurempi kuin 2, kutsutaan funktiota rekursiivisesti. rekursio($n, $i); } else echo $n; // Jos $i < 2, tulostetaan vastau Mikäli laitat tämän kohdan laskutoimitusten alle, kaikki välituloksetin näkyvät // (hitaampi). } $n = 9; // Luku jonka kertoman haluat laskea. rekursio($n, $n); // Kutsutaan funktiota. Huomaa, että aluksi molempiin parametreihin asetetaan samat arvot, toista parametriä // vähennetään vasta funktion sisällä. ?>
Kokeilinpa noita php.netin manuskan kommentoijien funkkareita ja seuraavat kaksi olivat nopeimpia niistä neljästä, mitä testasin - kaikki olivat nopeampia kuin tämä rekursiolla suoritettu kertoma. Huono haukkua selaimen vuoksi hitaaksi - aina voi ajaa komentoriviltä.
Kentti kirjoitti:
Hidastavana riippakivenä perässä oikeastaan roikkuu Mozilla Firefox, mikä sekään ei kovin hidas ole.
Tuolla tarkoitin, että sivu latautuu ainakin itselläni yhtä nopeasti, jos siinä on tuo funktio kuin jos siinä ei olisi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.