DEFINISI RECURSIVE
Recursive adalah proses pemanggilan dirinya sendiri
(fungsi atau prosedur). Fungsi maupun prosedur yang memanggil dirinya disebut
fungsi atau prosedur rekursif. Fungsi antuk suatu bagian program yang
mengembalikan (menghasilkan) hanya satu nilai. Sebuah function call adalah
suatu ekspresi jadi ia memberikan satu nilai.Procedure adalah suatu bagian
program yang melakukan aksi/fungsi khusus, biasanya berdasarkan sekumpulan
parameter. Sebuah procedure call adalah suatu statemen, jadi ia melakukan aksi.
Banyak obyek dalam matematika didefinisikan dengan menampilkan suatu proses
untuk menghasilkan obyek-obyek tsb.
Misalnya : n faktorial (n!)didefinisikan sebagai produk
dari semua integer diantara n dan 1. Contoh lain adalah bilangan asli. 1 adalah
bilangan asli.Successor dari 1 adalah bilangan asli.
Perbedaan rekursi dengan prosedur/fungsi adalah rekursi
bisa memanggil kedirinya sendiri tetapi prosedur atau fungsi harus dipanggil
lewat pemanggil prosedur/fungsi. Ciri masalah yang dapat diselesaikan secara
rekursif adalah masalah tersebut dapat direduksi menjadi satu atau lebih
masalah-masalah serupa yang lebih kecil. Secara umum suatu algoritma rekursif
selalu mengandung 2 macam kasus :
1. satu atau lebih kasus yang pemecahan masalahnya
dilakukan dengan menyelesaikan masalah serupa yg lebih sederhana (menggunakan
recursive call).
2. satu atau lebih kasus pemecahan masalahnya dilakukan
tanpa recursive call. Kasus ini disebut kasus dasar atau penyetop. Supaya tidak
terjadi rekursif tak hingga, maka setiap langkah rekursif haruslah mengarah ke
kasus penyetop.
Sistem komputer mengikuti jalannya program yang rekursif
biasanya dengan menggunakan suatu struktur data yang disebut stack. Ketika
eksekusi program sampai pada suatu rekursif call, ia menghentikan sementara
komputasi yg sedang dilaksanakannya sekarang untuk melakukan recursive call
tsb, agar ia dapat kembali ke keadaan semula setelah recursive call itu selesai
, ia harus menyimpan informasi yang cukup. Informasi yg diperlukan disebut
activation frame. Activation frame
disimpan pada bagian memori yg diatur dalam benruk stack. Rekursif yang berlapis-lapis dapat menghabiskan
memori yang mengakibatkan stack overflow.
Masalah yg mempunyai solusi rekursif juga mempunyai solusi
iteratif(menggunakan loop). Versi
iteratif seringkali lebih efisien daripada versi rekursif karena rekursif
biasanya menggunakan memori yg lebih besar dan memerlukan waktu ekstra u/
penanganan stack of activation frame.
Contoh 1 menghitung faktorial :
n ! = 1 jika n = 0 atau n=1
n ! = n * (n-1) * (n-2) *…* 1, jika n > 0
Script:
#include <stdio.h>
#include <conio.h>
int main(){
int nilai,a,i,j,k;
printf(“Masukkan nilai: “);
scanf(“%i”, &nilai);
for (i=0; i<=nilai-1; i++){
for (k=0; k<=((2*nilai)-(2*i)); k++){
printf(” “);
}
for (j=0; j<=i; j++){
if (j==0||i==j){
a=1;
}
else{
a=a*(i+1-j)/j;
}
printf(“%5i”, a);
}
printf(“\n”);
}
getch();
}
Tidak ada komentar:
Posting Komentar