Belajar Javascript Function

Rekursif

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

Pada video ini, kita akan mempelajari mengenai rekursif. Rekursif adalah function yang memanggil dirinya sendiri, sehingga akan mengulangi perintah-perintah yang dieksekusi di dalam function tersebut. Jadinya mirip dengan looping. Kenyataannya memang ada beberapa bahasa pemograman lain yang tidak memiliki sintaks perulangan, dan akhirnya mereka menggunakan rekursif sebagai solusi untuk melakukan perulangan.

Ini adalah cara kerja dari rekursif. Pada saat kita mulai memanggil function, kemudian function memanggil dirinya sendiri secara berkali-kali. Sama seperti loop, perulangan seperti ini bisa menyebabkan kita masuk ke infinite loop, sehingga kita perlu membuat suatu kondisi yang bisa mengeluarkan kita dari function. Pada rekursif, kondisi yang mengeluarkan kita dari function disebut dengan nama base case. Biasanya base case ini ditulis di bagian paling atas function.

Kita langsung masuk contoh coding ya. Misalkan kita hendak menuliskan hello world sebanyak 5 kali. Tapi kali ini kita menggunakan decrement ya. Jadi iterasinya dimulai dari nilai tinggi ke rendah. Misalkan kita membuatnya menjadi function helloWorld dengan parameter jumlah iterasinya. Maka fungsinya menjadi:

function helloWorld(max)
{
  for(let i = max; i > 0; i--)
  {
    console.log("Hello World " + i);
  }
}

helloWorld(5);

Kalau kita jalankan, maka di bagian console kita bisa melihat ada tulisan Hello World sebanyak 5 kali. Yang dimulai dari angka 5 hingga ke angka 1. Ini adalah function helloWorld yang menggunakan looping for.

Kita ubah dahulu function helloWorld dan kita akan membuat function helloWorld baru dengan tujuan yang sama, namun kali ini menggunakan cara rekursif.

Kita buat dahulu functionnya, dengan parameter max. Kemudian kita buat base casenya dahulu ya. Base case ini penting sekali untuk rekursif, agar kita tidak terkena infinite loop. Apabila nilai max lebih kecil dari 1, maka kita langsung return saja ya.

function helloWorld(max)
{
	if(max < 1)
		return;

Kemudian kita masuk ke badan dari fungsi helloWorld, yaitu untuk menuliskan helloWorld ditambah dengan angka max di console.

console.log(“Hello World “ + max);

Dan dibagian akhir function, kita memanggil kembali function helloWorld, dengan parameter max dikurangi 1.

helloWorld(max – 1);

Kita simpan dan jalankan di browser. Hasilnya tetap sama persis ya. Kita lihat lagi kodenya. Jadi kedua function ini memiliki hasil yang sama, hanya saja menggunakan cara yang berbeda. Yang diatas menggunakan looping for. Sedangkan yang dibawah menggunakan rekursif.

Kita lihat contoh lain dari penggunaan rekursif ya. Pada saat kita menggunakan looping, biasanya kita sudah mengetahui berapa jumlah loop yang harus kita lakukan, misalkan harus looping sebanyak 5 kali, 10 kali, atau sebanyak jumlah data.

Kita ubah semua kode menjadi komentar. Selanjutnya kita masuk ke contoh dimana kita tidak tau harus melakukan looping sebanyak berapa kali. Malah kita ingin menghitung jumlah loopingnya. Kita akan membuat suatu fungsi dengan nama loopUntilFive, dimana dalam setiap loop kita akan membuat angka acak diantara 0 hingga 9. Kita akan terus melakukan loop hingga kita menemukan bilangan 5, dan kemudian kita kembalikan berapa jumlah loop kita. Dengan menggunakan cara rekursif, maka fungsinya menjadi seperti ini:

function loopUntilFive(result = 0, count = 0)
{
  if(result == 5)
    return count;

  result = Math.floor(Math.random() * 10);
  return loopUntilFive(result, count+1);
}

console.log(loopUntilFive());

Kita simpan dan coba jalankan di browser. Setiap kali kita refresh browser, maka kita akan mendapatkan nilai yang berbeda-beda. Hal ini disebabkan karena kita melakukan loop dengan menggunakan nilai acak. Dan jumlah loop yang perlu kita jalankan sebelum kita menemukan angka 5 juga merupakan angka acak. Fungsi perulangan acak seperti ini lebih gampang untuk dituliskan menggunakan rekursif, daripada menggunakan sintaks perulangan seperti for dan while.

Contoh penggunaan rekursif lain adalah untuk memecahkan masalah faktorial. Kita lihat dulu apakah itu faktorial? Kita lihat contohnya ya. Satu faktorial adalah 1. Sedangkan dua faktorial adalah dua dikalikan dengan satu. Lalu tiga faktorial adalah tiga dikali dua dikali satu. Dan begitu seterusnya, jadi teman-teman bisa melihat polanya ya.

Jadi rumus seperti ini. n faktorial adalah n dikalikan dengan n dikurangi satu, dikalikan lagi dengan n dikurangi 2, dan dikalikan lagi seterusnya ya n kurang 3, n kurang 4, dan seterusnya hingga berakhir dikalikan dua dan dikalikan satu.

Namun kalau kita lihat lagi ke contohnya. Disini yang menjadi base case adalah 1!, yang nilainya adalah 1. Kalau kita lihat ke 2!, rumusnya menjadi 2 dikali dengan 1!. Kemudian 3! adalah 3 dikali 2!. Dan begitu seterusnya ke 4! dan 5!. Sehingga rumus umumnya bisa kita singkat menjadi n! = n x (n – 1)!. Jadi problem ini bisa dengan gampang kita pecahkan dengan menggunakan rekursif.

Kita kembali ke kode dan kita ubah dahulu kode kita sebelumnya menjadi komentar. Lalu kita buat fungsi baru untuk faktorial

function factorial(n)
{
  if(n <= 1)
    return 1;
  return n * factorial(n - 1);
}

console.log(factorial(5));

Kita simpan dan jalankan di browser. Dan hasilnya adalah 120. Nanti teman-teman bisa coba di kalkulator ya 5 x 4 x 3 x 2 x 1, kira-kira hasilnya benar 120 atau tidak. Dan teman-teman juga bisa mencoba untuk argument dengan nilai lain. Perlu dicatat bahwa fungsi ini hanya berjalan dengan benar untuk bilangan bulat positif. Dan jangan menggunakan angka terlalu besar sebagai argument ya, karena takutnya nilainya terlalu besar sehingga sudah tidak bisa ditampung oleh tipe data number.

2 Jam 21 Menit
1. Pendahuluan 16 Menit
3. Head 13 Menit
10. Tabel 21 Menit
1 Jam 2 Menit
1. Form 15 Menit
2. Validasi 12 Menit
3. Input Type 15 Menit
4. Dropdown 9 Menit
1 Jam 29 Menit
9. Pseudo Class 11 Menit
3 Jam 26 Menit
2. Lebar/Width 13 Menit
16. CSS Reset 6 Menit
2 Jam 21 Menit
4. Flex-Wrap 10 Menit
3 Jam 17 Menit
7. Flex Utility 16 Menit
8. Operator 28 Menit
11. Objek String 18 Menit
4. Scope 10 Menit
5. Rekursif 10 Menit
8. Notasi Big O 24 Menit
4. Prototype 18 Menit
7. Map 19 Menit
8. Set 12 Menit
2. DOM Selector 40 Menit
7. DOM Traversal 14 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.