- Katılım
- 2 Mar 2015
- Konular
- 59,189
- Mesajlar
- 88,442
- Çözüm
- 109
- Online süresi
- 4mo 16d
- Reaksiyon Skoru
- 14,280
- Altın Konu
- 2,398
- TM Yaşı
- 11 Yıl 3 Ay 9 Gün
- Başarım Puanı
- 1,051
- MmoLira
- 695,207
- DevLira
- 234
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Özyinelemeli bir fonksiyon, belirli bir koşul karşılanana kadar kendini çağıran bir fonksiyondur. PHP'de, özyinelemeli bir fonksiyon tanımlamak mümkündür.
Faktöriyel'i tanımlamak için faktöriyel'in kendisini kullandığımız görülebilir. Bu nedenle, bu yinelemeli bir fonksiyon yazmak için uygun bir durumdur.
Yukarıdaki tanımı 5'in faktöriyel değerinin hesaplanması için genişletelim.
Bu hesaplamayı bir döngü kullanarak da yapabiliriz ancak onun özyinelemeli fonksiyonu, sayıyı 1'e ulaşana kadar art arda azaltarak çağırmayı içerir.
Aşağıdaki çıktıyı üretecektir:
Bir for döngüsü kullanarak ve her sayıyı karşılaştırarak listedeki belirli bir sayı için ardışık bir arama gerçekleştirebilsek de, özellikle liste çok büyükse ardışık arama verimli değildir. Burada, 'high' dizininin 'low' dizininden büyük olup olmadığını kontrol eden ikili arama algoritmasını kullanabiliriz. 'mid' değişkeninde bulunan değere göre, fonksiyon öğeyi aramak için tekrar çağrılır.
Artan düzende düzenlenmiş bir sayı listemiz var. Sonra, listenin orta noktasını buluyoruz ve istenen sayının orta noktadaki sayıdan küçük veya büyük olmasına bağlı olarak kontrolü orta noktanın soluna veya sağına sınırlandırıyoruz.
Aşağıdaki diyagram ikili aramanın nasıl çalıştığını göstermektedir.
Aşağıdaki çıktıyı üretecektir:
Verilen listede bulunan farklı sayıların çıktısını kontrol edebileceğiniz gibi, listede bulunmayan sayıları da kontrol edebilirsiniz.
- Belirli bir problemin kendisi açısından tanımlanması durumunda yineleme kullanılır.
- Bazen, yinelemeli yaklaşım kullanarak bir problemi çözmek sıkıcı olabilir. Yinelemeli yaklaşım, görünüşte karmaşık problemlere çok özlü bir çözüm sağlar.
- PHP'deki özyineleme, C ve C++'daki özyinelemeye çok benzer.
- Özyinelemeli fonksiyonlar özellikle iç içe geçmiş veri yapılarını dolaşırken ve arama veya sıralama algoritmalarında kullanılır.
- İkili ağaç dolaşımı, yığın sıralaması ve en kısa rotanın bulunması, özyinelemenin kullanıldığı durumlardan bazılarıdır.
Faktöriyelin Tekrarlama Kullanılarak Hesaplanması
Tekrarlamanın en popüler örneği faktöriyel hesaplamasıdır. Matematiksel olarak faktöriyel şu şekilde tanımlanır:n! = n × (n-1)!
Faktöriyel'i tanımlamak için faktöriyel'in kendisini kullandığımız görülebilir. Bu nedenle, bu yinelemeli bir fonksiyon yazmak için uygun bir durumdur.
Yukarıdaki tanımı 5'in faktöriyel değerinin hesaplanması için genişletelim.
5! = 5 × 4!
5 × 4 × 3!
5 × 4 × 3 × 2!
5 × 4 × 3 × 2 × 1!
5 × 4 × 3 × 2 × 1
= 120
Bu hesaplamayı bir döngü kullanarak da yapabiliriz ancak onun özyinelemeli fonksiyonu, sayıyı 1'e ulaşana kadar art arda azaltarak çağırmayı içerir.
Örnek
Faktöriyeli hesaplamak için kullanılan rekürsif fonksiyon aşağıdadır.
PHP:
<?php
function factorial ($n) {
if ($n == 1) {
echo $n . PHP_EOL;
return 1;
} else {
echo "$n * ";
return $n*factorial($n-1);
}
}
echo "Factorial of 5 = " . factorial(5);
?>
Aşağıdaki çıktıyı üretecektir:
5 * 4 * 3 * 2 * 1
Factorial of 5 = 120
Tekrarlama Kullanarak İkili Arama
Özyinelemenin nasıl çalıştığını anlamak için başka bir örneğe bakalım. Eldeki sorun, verilen bir sayının bir listede mevcut olup olmadığını kontrol etmektir.Bir for döngüsü kullanarak ve her sayıyı karşılaştırarak listedeki belirli bir sayı için ardışık bir arama gerçekleştirebilsek de, özellikle liste çok büyükse ardışık arama verimli değildir. Burada, 'high' dizininin 'low' dizininden büyük olup olmadığını kontrol eden ikili arama algoritmasını kullanabiliriz. 'mid' değişkeninde bulunan değere göre, fonksiyon öğeyi aramak için tekrar çağrılır.
Artan düzende düzenlenmiş bir sayı listemiz var. Sonra, listenin orta noktasını buluyoruz ve istenen sayının orta noktadaki sayıdan küçük veya büyük olmasına bağlı olarak kontrolü orta noktanın soluna veya sağına sınırlandırıyoruz.
Aşağıdaki diyagram ikili aramanın nasıl çalıştığını göstermektedir.
Örnek
Aşağıdaki kod, yinelemeli ikili arama tekniğini uygular.
PHP:
<?php
function bsearch($my_list, $low, $high, $elem) {
if ($high >= $low) {
$mid = intval(($high + $low)/2);
if ($my_list[$mid] == $elem)
return $mid;
elseif ($my_list[$mid] > $elem)
return bsearch($my_list, $low, $mid - 1, $elem);
else
return bsearch($my_list, $mid + 1, $high, $elem);
}
else
return -1;
}
$list = [5,12,23, 45, 49, 67, 71, 77, 82];
$num = 67;
$result = bsearch($list,0,count($list)-1, $num);
if ($result != -1)
echo " Number $num found at index " . $result;
else
echo "Element not found!";
?>
Aşağıdaki çıktıyı üretecektir:
Number 67 found at index 5
Verilen listede bulunan farklı sayıların çıktısını kontrol edebileceğiniz gibi, listede bulunmayan sayıları da kontrol edebilirsiniz.


