C 1
chengdu
xranzei 1
xranzei
zendor2 1
zendor2
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
D 1
delimuratt
melankolıa18 1
melankolıa18
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PHP - Özyinelemeli Fonksiyonlar

Carissa

Administrator
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye Turkmmo Discord Nitro Booster
Admin
VIP Üye
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 8 Gün
Başarım Puanı
1,051
MmoLira
695,207
DevLira
234
Ticaret - 0%
0   0   0

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.

  • 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.

php_recursive_functions.jpg

Ö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.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst