Tutorial Function Pada PHP

Recursive

Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.

Apakah itu recursive? Recursive adalah function yang memanggil function itu sendiri, sehingga kode di dalam function dijalankan secara berulang-ulang. Pada kenyataannya, ada beberapa bahasa pemograman lain yang tidak memiliki sintaks khusus untuk perulangan, sehingga apabila kita ingin melakukan perulangan, maka kita harus melakukan recursive.

Sama seperti perulangan, kita harus memiliki satu kondisi yang menyebabkan kita keluar dari perulangan. Pada recursive, kondisi ini kita sebut dengan nama base case. Biasanya kita menuliskan base case pada bagian paling atas dari function recursive agar tidak kelupaan. Sebab kalau kita lupa menuliskan base case, maka perulangan akan dilakukan secara terus-menerus hingga akhirnya terjadi error stack overflow.

Mengapa kita perlu menggunakan recursive? Sebab ada kasus-kasus tertentu yang cocok untuk diselesaikan dengan cara recursive, misalnya seperti kasus faktorial, deret fibbonaci, ataupun pada saat kita mesti melakukan penelurusan data secara backtracking. Kode dari kasus seperti ini akan jauh lebih sederhana kalau kita tulis menggunakan recursive, dibandingkan dengan menggunakan cara looping biasa.

Disamping memiliki kelebihan, recursive juga memiliki kekurangan. Kekurangan pertama adalah perulangan yang ditulis menggunakan rekursive berjalan lebih lambat dibandingkan dengan perulangan yang ditulis menggunakan loop biasa. Penggunaan memory pada rekursive juga lebih banyak. Bahkan kalau kita melakukan perulangan terlalu banyak menggunakan rekursive, sistem kita bisa kehabisan memory dan menghasilkan error yang bernama stack overflow. Kekurangan-kekurangan ini sangat merugikan bagi back-end developer, karena sangat menghamburkan resource yang dimiliki oleh server, sedangkan kita harus membayar server berdasarkan resource yang kita gunakan. Oleh karena itu, sebisa mungkin hindari menulis coding menggunakan recursive.

Kita praktek coding ya. Misalkan kita hendak membuat sebuah function untuk menampilkan Hello World sebanyak n kali. Kita deklarasikan functionnya yaitu helloWorldLoop dengan parameter int n. Pertama kita buat dahulu versi loop biasa.

Nah, berhubung parameter n adalah jumlah loop-nya, maka lebih enak kita membuat loop dalam bentuk decrement. Jadi kita gunakan sintaks for, dengan nilai awal $i adalah n. Kondisi $i > 0. Dan $i--. Di dalamnya kita tuliskan “Hello World\n”.php. Misalkan kita panggil function ini dengan menggunakan argument 3, maka kita mendapatkan hasil Hello World sebanyak 3 kali.

Kalau teman-teman ingin lebih jelas mengenai nilai variable $i pada loop, kita bisa sekalian cetak nilai $i setelah Hello World.

function helloWorldLoop(int $n){
  for($i = $n; $i > 0; $i--)
    echo "Hello World $i\n";
}

helloWorldLoop(3);

Selanjutnya kita buat function yang sama, namun versi recursif. Kita deklarasikan functionnya helloWorldRecursive dengan parameter int $n. Pertama kita buat base casenya terlebih dahulu ya. Apabila $n<= 0, maka langsung return atau keluar dari function. Setelah itu, kita cetak kata “Hello World $n\n”. Dan terakhir, kita panggil kembali fungsi helloWorldRecursive dengan argument $n – 1. Ingat ya, pada saat kita memanggil kembali fungsi rekursif, harus ada perubahan nilai pada argument. Perubahan inilah yang mengeluarkan kita dari perulangan yang dilakukan oleh rekursif.

Kalau kita ganti nama function yang dipanggil dari helloWorldLoop menjadi helloWorldRecursive, maka hasilnya sama saja ya. Yang berbeda hanya cara codingnya saja. Function pertama kita menggunakan cara looping biasa. Sedangkan function yang kedua menggunakan cara recursive.

function helloWorldRecursive(int $n){
  if($n <= 0)
    return;
  echo "Hello World $n\n";
  helloWorldRecursive($n - 1);
}

helloWorldRecursive(3);

Kita masuk ke contoh soal yang bisa dengan mudah dipecahkan dengan menggunakan recursive, yaitu deret faktorial. Berapakah nilai dari faktorial 1, atau yang dilambangkan dengan simbol satu tanda seru? Faktorial 1 adalah 1.

Kita lanjutkan. Nilai dari faktorial 2 adalah 2 dikali 1, yaitu 2. Kemudian nilai dari faktorial 3 adalah 3 dikali 2 dikali 1, yaitu 6. Dan begitu seterusnya. Jadi kalau kita lihat, disini terjadi pola ya. Nilai dari faktorial ke n adalah n dikali (n -1) dikali lagi (n – 2) dan dikalikan dengan seterusnya hingga akhirnya kita menemukan angka 1.

Dan yang lebih menariknya lagi, kalau kita lihat ke rumus faktorial 2 adalah 2 dikali 1. Kemudian kita lihat ke rumus faktorial 3 adalah 3 dikali 2 dikali 1. Perhatikan lagi bahwa 2 dikali 1 ini adalah faktorial 2. Artinya kita bisa juga menganggap bahwa faktorial 3 adalah 3 dikali kan dengan faktorial 2. Dan begitu juga seterusnya. Jadi kalau kita melihat pola yang lebih singkat, nilai dari faktorial n adalah n dikalikan dengan faktorial n – 1. Ini adalah rumus recursive.

Kita praktek kerjakan soal faktorial ya. Pertama kita kerjakan dahulu dengan cara recursive. Kita buat function factorialRecursive. Parameternya int $n. Dan seperti biasa, kalau kita hendak membuat recursive, kita buat dahulu base case-nya ya. Agar tidak terjadi looping forever. Base case-nya adalah kalau nilai $n == 1 maka kita kembalikan nilai 1. Selain itu kita kembalikan nilai $n dikalikan dengan factorialRecursive($n – 1). Ini adalah rumus singkat yang kita lihat tadi ya.

Kita coba function-nya. Kita echo factorialRecursive(2). Tambahkan PHP_EOL supaya rapi. Hasilnya adalah 2. Kalau kita ganti 3, hasilnya adalah 6. Dan kalau 5 hasilnya adalah 120.

function factorialRecursive(int $n){
  if($n == 1)
    return 1;
  return $n * factorialRecursive($n - 1);
}

echo factorialRecursive(2) . PHP_EOL;

Oke ya. Kita sudah berhasil memecahkan masalah faktorial dengan cara recursive. Namun sebagai perbandingan, kita buat juga function baru yang menggunakan cara looping biasa.

Kita buat function factorialLoop. Parameternya tetap sama ya, yaitu int $n. Nah, kalau kita hendak mengerjakan dengan cara loop, maka kita harus membuat satu variable dahulu untuk menampung hasilnya. Misalnya kita beri nama $result dengan nilai awal 1.

Kemudian kita lakukan looping secara decrement, dengan nilai awal $i = $n. Kondisi $i > 0 dan $i--. Kemudian kita kalikan $result dengan nilai $i. Dan yang terakhir jangan lupa kembalikan nilai $result.

Kita coba ya. Kalau kita menggunakan function yang loop, maka nilainya tetap sama yaitu 120.

function factorialLoop(int $n) {
  $result = 1;
  for($i = $n; $i > 0; $i--)
    $result *= $i;
  return $result;
}

echo factorialLoop(5) . PHP_EOL;

Jadi kita sudah berhasil memecahkan soal faktorial dengan menggunakan cara recursive dan looping biasa. Kalau kita lihat sekilas source code-nya, cara yang recursive lebih sederhana ya. Karena soal faktorial ini memang lebih cocok dikerjakan secara recursive.

2 Jam 41 Menit

Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.

Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.