Rekursif
•
Dapat digunakan ketika inti dari masalah terjadi
berulang kali
•
Sedikit lebih efisien dari iterasi tapi lebih elegan
•
Method-methodnya dimungkinkan untuk
memanggil dirinya sendiri
•
Data yang berada dalam method tersebut
Iterasi
• Dapat digunakan pada struktur kontrol pengulangan • Proses diakhiri ketika kondisi loop gagal dilaksanakan • Lebih cepat
Rekursif
• Memanggil suatu method secara berulang-ulang
• Menggambarkan sebuah masalah kedalam lingkup yang lebih kecil dari pengulangan itu sendiri
• proses yang berakhir dengan kondisi tertentu disebut permasalahan dasar yang telah tercukupi oleh suatu pembatasan kondisi
• Memangkatkan bilangan real tak nol dengan suatu pangkat bilangan bulat
1.public static double pangkatRekursif (double x,
pangkatRekursif (4.0, 2)
return (4.0 * pangkatRekursif (4.0, 1));
pangkatRekursif (4.0, 1)
return (4.0 * pangkatRekursif (4.0, 0));
pangkatRekursif (4.0, 0) return 1.0;
pangkatRekursif (4.0, -2)
return (1 / pangkatRekursif (4.0, 2));
pangkatRekursif (4.0, 2)
return (4.0 * pangkatRekursif (4.0, 1));
pangkatRekursif (4.0, 1)
return (4.0 * pangkatRekursif (4.0, 0));
pangkatRekursif (4.0, 0) return 1.0;
pangkatRekursif (4.0, -2)
Ciri masalah yang dapat diselesaikan secara rekursif
adalah masalah itu dapat di-reduksi menjadi satu atau
lebih masalah-masalah serupa yang lebih kecil
Secara umum, algoritme rekursif selalu mengandung dua
macam kasus:
•
kasus induksi: satu atau lebih kasus yang pemecahan
masalahnya dilakukan dengan menyelesaikan masalah
serupa yang lebih sederhana (yaitu menggunakan
recursive calls
)
•
kasus dasar atau kasus penyetop (
base case
): satu
atau lebih kasus yang sudah sederhana sehingga
pemecahan masalahnya tidak perlu lagi menggunakan
recursive-calls
.
Supaya tidak terjadi rekursi yang tak berhingga, setiap
langkah rekursif haruslah mengarah ke kasus penyetop
1. public class RekursifPangkat{
2. public static void main (String args[]){
3. RekursifPangkat p = new RekursifPangkat(); 4. System.out.print("3 pangkat 6 = ");
5. System.out.print(p.HitungPangkat(3,6));
6. }
7. public int HitungPangkat(int x, int y){
8. if(y==1){
9. return x;
10. }
11. else {
12. return x * HitungPangkat(x,y-1);
13. }
Definisi Rekursif :
•
factorial(n) = factorial(n-1) * n, n adalah
suatu integer yang bernilai positif
•
factorial(1) = 1
Contoh:
•
factorial(2) = factorial(1)*2 = 2
1.
class FactorialIter {
9.
public static void main(String args[])
10.
{
11.
System.out.println(factorial(3));
12.}
1.
class FactorialRecur {
8.
public static void main(String args[]) {
9.System.out.println(factorial(3));
1.
public class RekursifFibonacci{
2.
public static void main (String args[]){
3.
RekursifFibonacci f = new
RekursifFibonacci();
4.
System.out.println("Deret Fibonacci : ");
5.
for (int i=0;i<10; i++)
6.
{
7.
System.out.print(f.HitungDeret(i)+" ,");
8.
}
9.
System.out.print("...");
11.
public int HitungDeret(int x){
12.
if(x==0){
13.
return x;
14.
}
15.
else if(x==1){
16.
return x;
17.
}
18.
else {
19.