Merhaba,
Bu yazımda, sizlere hepinizin bildiği faktoriyel hesaplamayı PHP dilinde fonksiyon haline getirmeyi göstereceğim. Bunu yaparken iki farklı şekilde göreceğiz. Birincisi klasik yöntem olan for döngüsü ile hesaplama. Diğer yöntem ise recursive, yani özyineleme şeklinde olacaktır. Recursive ifadesini ilk kez duyanlar buradan bakabilir ya da daha detaylı araştırabilirler.
1 2 3 4 5 6 7 8 9 10 |
function faktoriyel($sayi) { $total=1; for($a=1; $a<=$sayi; $a++) { $total *= $a; } return $total; } |
Yukarıdaki kodlarda görülen for döngüsü, fonksiyon parametresi olarak faktoriyeli hesaplanması istenilen sayıyı, 1 ile kendisi arasındaki tüm sayıları birbiriyle çarpmak suretiyle $total değişkenine atar. Fonksiyon ise sonucu döndürür. Tabi burada, fonksiyon parametresi olarak verilen sayının bir integer olup olmadığı kontrolünü yapmaya gerek duymadım, siz nasıl olsa onu biliyorsunuz
1 2 3 4 5 6 7 8 9 10 11 12 |
function faktoriyel($sayi) { if(!is_numeric($sayi)) return false; $total=1; for($a=1; $a<=$sayi; $a++) { $total *= $a; } return $total; } |
Gördüğünüz gibi, artık fonksiyon parametresinin sayısal bir değer olup olmadığı da kontrol ediliyor. Fonksiyonu çağırırken;
1 2 |
faktoriyel(5); //çıktı: 120 faktoriye("phpservisi") //çıktı "boş ekran gelecektir." |
Bir diğer yöntem olan recursive ise fonksiyon içerisinde kendisini çağırır ve bu yine fonksiyon içerisindeki sınır ölçüsünde tekrarlanır. Şöyle ki;
1 2 3 4 5 6 7 8 |
function faktoryel($sayi) { if($sayi<2) { return 1; } return $sayi * faktoryel($sayi-1); } |
Faktoriyel hesaplama çok kabaca, sayının kendisi dahil, kendinden önceki pozitif sayıların sıfıra kadar birbirleriyle çarpılmaları demektir. Detaylı tanım için buradan bakabilirsiniz. Yani 5 sayısının faktoriyelini hesaplama işlemi,
1 |
5 x 4 x 3 x 2 x 1 = 120 |
şeklinde olmaktadır. For döngüsünde $a değişkeninin 0 değil de 1 olmasının sebebi de bu tanım içerisinde görülebilmektedir. Recursive çözüm yoluyla hesaplama işleminde, yukarıdaki fonksiyon,
1 |
5 x 4 x 3 x 2 x 1 x 0 x -1 x -2 x -3 ...n |
şeklinde sonsuza kadar gidecektir. Bunu önlemek için $sayi değişkeninin 2’den küçük olduğu tüm değerlerde 1 değerini döndürmesini sağlayan if koşullu yapısı kullandık.
Bir sonraki yazıda görüşmek dileğiyle!
Yazar Hakkında
My Name is A. Gokhan SATMAN, and I am a software engineer, Author and game developer. gokhansatman.com
Daha fazla yazı görüntüle
Henüz yorum yok
Tartışma başlatabilirsin.