Rekursif adalah teknik pemecahan masalah
yang powerful dan dapat digunakan ketika inti dari masalah terjadi
berulang kali. Tentu saja, tipe dari masalah ini dapat dipecahkan
mengunakan perkataan berulang-ulang (yaitu, menggunakan konstruksi
looping seperti for, while dan do-while).
Sesungguhnya, iterasi atau perkataan
berulang-ulang merupakan peralatan yang lebih efisien jika dibandingkan
dengan rekursif tetapi rekursif menyediakan solusi yang lebih baik untuk
suatu masalah. Pada rekursif, method dapat memanggil dirinya sendiri.
Data yang berada dalam method tersebut seperti argument disimpan
sementara ke dalam stack sampai method pemanggilnya diselesaikan.
Rekursif Vs. Iterasi
Untuk pengertian yang lebih baik dari
rekursif, mari kita lihat pada bagaimana macammacam dari teknik iterasi.
Dalam teknik-teknik tersebut juga dapat kita lihat penyelesaian sebuah
loop yang lebih baik menggunakan rekursif daripada iterasi. Penyelesaian
masalah dengan perulangan menggunakan iterasi secara tegas juga
digunakan pada struktur kontrol pengulangan. Sementara itu, untuk
rekursif, task diulangi dengan memanggil sebuah method perulangan.
Maksud dari hal tersebut adalah untuk menggambarkan sebuah masalah ke
dalam lingkup yang lebih kecil dari perulangan itu sendiri.
Pertimbangkan penghitungan faktorial dalam penentuan bilangan bulat.
Definisi rekursif dari hal tersebut dapat diuraikan sebagai berikut:
factorial(n) = factorial(n-1) * n; factorial(1) = 1. Sebagai contohnya,
nilai faktorial dari 2 sama dengan fatorial (1)*2, dimana hasilnya
adalah 2. Faktorial dari 3 adalah 6, dimana sama dengan faktorial dari
(2)*3.
Dengan iterasi, proses diakhiri ketika
kondisi loop gagal atau salah. Dalam kasus dari penggunaan rekursif,
proses yang berakhir dengan kondisi tertentu disebut permasalahan dasar
yang telah tercukupi oleh suatu pembatasan kondisi. Permasalahan yang
mendasar merupakan kejadian yang paling kecil dari sebuah masalah.
Sebagai contoh, dapat dilihat pada kondisi rekursif pada faktorial,
kasus yang mudah adalah ketika masukannya adalah 1. 1 dalam kasus ini
merupakan dasar dari masalah. Penggunaan dari iterasi dan rekursif dapat
bersama-sama memandu loops jika hal ini tidak digunakan dengan benar.
Keuntungan iterasi dibandingkan rekursif
adalah performance yang lebih baik. Hal tersebut lebih cepat untuk
rekursif sejak terbentuknya sebuah parameter pada sebuah method yang
menyebabkan adanya suatu CPU time. Bagaimanapun juga, rekursif mendorong
pelatihan perancangan software yang lebih baik, sebab teknik ini
biasanya dihasilkan dalam kode yang singkat yang lebih mudah untuk
dimengerti dan juga mempromosikan reusability pada suatu solusi yang
sebelumnya telah diterapkan. Memilih antara iterasi dan rekursif
merupakan permasalahan dari menjaga keseimbangan antara baiknya sebuah
performance dan baiknya perancangan software.
/**
* Simple Java program to find factorial of a number using recursion and iteration.
* Iteration will use for loop while recursion will call method itself
*/
public class FactorialInJava{
public static void main(String args[]) {
//finding factorial of a number in Java using recursion - Example
System.out.println("factorial of 5 using recursion in Java is: " + factorial(5));
//finding factorial of a number in Java using Iteration - Example
System.out.println("factorial of 6 using iteration in Java is: " + fact(6));
}
public static int factorial(int number){
//base case
if(number == 0){
return 1;
}
return number*factorial(number -1); //is this tail-recursion?
}
public static int fact(int number){
int result = 1;
while(number != 0){
result = result*number;
number--;
}
return result;
}
}
hasilnya
Sumber : http://javarevisited.blogspot.com/2012/04/java-program-to-find-factorial-of.html
Tidak ada komentar:
Posting Komentar