Rekursi (Recursion) adalah teknik membuat sebuah fungsi yang memanggil fungsi itu sendiri. Teknik ini memberikan cara untuk memecah masalah yang kompleks menjadi masalah sederhana yang lebih mudah untuk dipecahkan.
Rekursi mungkin sedikit lebih sulit dipahami. Cara terbaik memahaminya adalah mengetahui bagaimana cara kerjanya dengan cara berekseperimen.
Contoh Rekursi
Menambahkan dua angka merupakan hal mudah dilakukan, tapi menambahkan sebuah rentang angka akan membuatnya menjadi lebih rumit. Dalam contoh di bawah ini, rekursi digunakan untuk menambahkan rentang angka bersamaan dengan memecahnya kedalam tugas yang lebih sederhana.
Berikut contoh penggunaan rekursi untk menambahkan semua angka hingga 10
public class Main {
public static void main(String[] args) {
int hasil = jumlahkan(10);
System.out.println(hasil);
}
public static int jumlahkan(int k) {
if (k > 0) {
return k + jumlahkan(k - 1);
} else {
return 0;
}
}
}
Output :
55
Dari contoh diatas, ketika fungsi jumlahkan() dipanggil, fungsi itu menambahkan parameter k dengan setiap angka yang lebih kecil dari k dan mengembalikannya sebagai hasil. Ketika k menjadi 0, fungsi tersebut hanya mengembalikan 0. Ketika program berjalan, langkah-langkah program akan terlihat seperti berikut berikut ini :
10 + jumlahkan(9)
10 + (9 + jumlahkan(8))
10 + (9 + (8 + jumlahkan(7)))
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + jumlahkan(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
Karena fungsi tidak memanggil dirinya sendiri ketika k sama dengan 0, program berhenti dan mengembalikan hasilnya.
Kondisi Berhenti
Seperti halnya Loop (pengulangan) yang bisa menjadi masalah ketika terjadi pengulangan tak terbatas, fungsi rekursi bisa menjadi masalah juga ketika terjadi rekursi tak terbatas. Rekursi tak terbatas adalah ketika fungsi tidak pernah berhenti memanggil dirinya sendiri. Setiap fungsi rekursi seharusnya memiliki kondisi untuk berhenti, yang dimana kondisi tersebut berhenti memanggil dirinya sendiri. Di contoh sebelumnya, kondisi berhenti adalah ketika parameter k menjadi 0.
Akan sangat membantu melihat beberapa contoh berbeda untuk lebih memahami konsepnya. Dalam contoh ini, fungsi akan menjumlahkan rentang angka antara awal dan akhir. Kondisi penghentian untuk fungsi rekursi ini adalah ketika akhir tidak lebih besar dari awal :
public class Main {
public static void main(String[] args) {
int hasil = penjumlahan(5, 10);
System.out.println(hasil);
}
public static int penjumlahan(int awal, int akhir) {
if (akhir > awal) {
return akhir + penjumlahan(awal, akhir - 1);
} else {
return akhir;
}
}
}
Output :
45
Tutorial sebelumnya : Java Scope
Tutorial setelahnya : Contoh Program OOP Java
Semua Tutorial JAVA : Tutorial JAVA