<?php
function fibonacci($count, $f1=0, $f2=1) {
if ($count < 1) return 0;
$return = $count >1 ? fibonacci($count -1, $f2, $f1 + $f2) : $f2;
return $return;
}
echo fibonacci(19);
?>
Trzeba uważać żeby nie przesadzić z liczbą. Można dopisać if ($count > 10000) return null;.
Analizować raczej nie trzeba. Jeżeli $count jest większy niż 1 wywołaj funkcję i licz dalej zwróć ostatni wynik.
Można to zrobić w pętli for, ale to wydaje mi się bardziej proste i przejrzyste i pozwala myśleć obiektowo.
Powodzenia.
Postaram się przekazać swoje doświadczenia z PHP, oraz innych dziwnych rzeczach, typu MySQL, DB2. Czyli to co umiem. Blogoczytelników o słabych nerwach proszę o nieczytanie tego blogu. Dlaczego? Jeszcze nie wiem. W razie pytań z dziedziny PHP proszę pytać, jest cień możliwości że akurat to wiem. ;)
Pokazywanie postów oznaczonych etykietą funkcja. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą funkcja. Pokaż wszystkie posty
wtorek, 7 lipca 2015
Funkcja obliczające ciąg Fibonacciego
Witam.
Natchniony jakimś blogiem przedstawiam prostą punkcje obliczający ciąg Fibonacciego.
niedziela, 23 września 2012
Programowanie obiektowe w PHP. (cz. 3)
Programując w Javie na Androida są dostępne w klasie dwie ciekawe metody. onCreate, onDestroy. Takie cacka dostępne są też w PHP. Nazywają się __construct i __destruct. Jedna i druga zaraza jest dziedziczona. Teraz trochę z nimi zamieszam. Uwaga!
Załóżmy że mamy taki malusi przykładzik.
<?php
class klasa_a {
function __construct() {
echo "Się skonstruowało! <br>";
}
}
$ob = new klasa_a();
?>
Jak widać wiem co nieco o HTML'u. ;-)
Mamy prostą klasę i se ją wywołujemy, pakując do zmiennej $ob, co spowodowało objawieniem się napisu. Co by utrudnić życie, zrobimy drugą klasę na podstawie tej pierwszej. Ci od Androida (ja do nich też należę) tak mają, to czemu nie w PHP. Nie można? A trzeba!
<?php
class klasa_a {
function __construct() {
echo "Się konstruowało!
";
}
}
class klasa_b extends klasa_a {
}
$ob = new klasa_b();
?>
Wywołujemy klasę która jest rzekomo pusta, a tu pojawia się napis. To żaden cud, błąd, spisek, układ. Klasa b dziedziczy wszystko co ma klasa a, włącznie z konstruktorami i całym dobrodziejstwem inwentarza. Dziedzictwo oczywiście można nadpisać.
<?php
class klasa_a {
function __construct() {
echo "Się skonstruowało! <br>";
}
}
class klasa_b extends klasa_a {
function __construct() {
echo "Dziedziczone ";
}
}
$ob = new klasa_b();
?>
Jak widać wyświetliło się co innego, metoda została nadpisana. Ale co zrobić że w klasie a podoba mi się wpis i chcę dodać drugi w klasie b? Jest na to metoda. Zmieniamy w klasie b konstruktor tak.
function __construct() {
echo "Dziedziczone ";
parent::__construct();
}
Po prostu odwołujemy się do rodzica i już. Cała filozofia. w ten sposób możemy ostro namieszać w klasach, co by wrogi element z mniejszym doświadczeniem, a większymi aspiracjami se zęby połamał.
Do pieca można dowalić jeszcze __destruct. Ta metoda wykonuje się kiedy skrypt jest kończony. A tak to wygląda.
<?php
class klasa_a {
function __construct() {
echo "się skonstruowało! <br>";
}
}
class klasa_b extends klasa_a {
function __construct() {
echo "Dziedziczone ";
parent::__construct();
}
function __destruct() {
echo "To już jest koniec, nie będzie nic! <br>";
}
}
$ob = new klasa_b();
echo "Jakaś linia co by była?!! <br>";
?>
Jak widać destruktor wykonał się na samym końcu. W brew pozorom bardzo przydatna rzecz. Można zamykać połączenie z bazą kiedy robimy to w swojej klasie, można zamykać plik, co by nie zapomnieć, a dane nie poszły se w siną dal, można dać stopkę kiedy tworzymy stronę w jakiejś zagmatwanej stronie... można zamieszać, ja tylko dałem marny przykład co by wiedzieć co w trawie piszczy.
Subskrybuj:
Posty (Atom)