Showing posts with label Bahasa Pascal. Show all posts
Showing posts with label Bahasa Pascal. Show all posts

Saturday, May 2, 2015

Operasi Terhadap File Pada Pascal


       Data yang telah disimpan pada tipe-tipe data yang telah dipelajari ada pada bab-bab sebelumnya bersifat sementara. Artinya sewaktu program selesai dijalankan data tersebut akan hilang. Pada banyak aplikasi, data yang dimasukkan meskipun program telah selesai harus disimpan. Untuk memecahkan masalah penyimpanandata yang seperti itu digunakan file.
Sebelumnya kita telah biasa menyimpan nilai pada suatu variabel. Misalnya menyimpan suatu data pada sebuah array atau record. Penyimpanan nilai pada variabel ini hanya berlaku sementara yaitu pada saat program di eksekusi saja, dan setelah program di nonaktifkan maka nilai dari variabel tersebut akan hilang. Pada beberapa program terkadang diperlukan untuk tetap menyimpan suatu nilai meskipun program telah di nonaktifkan. Oleh karena itu akan dikenalkan teknik penyimpanan dengan menggunakan file. File pada Pascal dikenal dalam 3 jenis, yaitu File Text, File bertipe, File tidak bertipe

Ada dua metode untuk mengakses komponen file :
1.             Beruntun (Sequensial)
Teknik ini relatif lebih lambat terutama jika ukuran file tersebut besar. Hal ini disebabkan karena teknik pengaksesannya dimulai dari awal file sampai akhir file secara berurutan. metode ini relatif lebih mudah dibuat dan dipelihara. File beruntun atau file teks berisi data ASCII. Tiap recordnya memiliki panjang yang bervariasi dimana setiap recordnya akan ditandai dengan EOL (End of Line). File teks hanya dapat diakses secara sequensial. Data disimpan sebagai kumpulan karakter.
Contoh deklarasinya :
var
nama_variabel_File : text

2.             Acak (Random)
Komponen diakses secara langsung, namun pembuatannya lebih susah dari pada metode berurutan. Data disimpan sebagai bilangan biner. Yang tergolong file ini adalah file bertipe dan file tidak bertipe.
Perintah-perintah
·              Assign (nama_variabel_file, string_nama) : menetapkan nama file eksternal pada variabel nama variabel file
·               reset (nama_variabel_file) : membuka file untuk input (pembacaan file)
·               rewrite (nama_variabel_file) : membuka file untuk output (penulisan file), mulai dalam file keadaan kosong. Jadi seandainya file tersebut sudah ada maka akan dihapus dan dibuat ulang, namun jika belum ada maka dia akan buat baru.
·               append (nama_variabel_file) : menambah isi file
·               eof (nama_variabel_file) : menunjukkan akhir dari file (untuk file teks saja)
·               write (nama_variabel_file, nama_variabel) : menulis ke file
·               writeln (nama_variabel_file, nama_variabel) : menulis ke file (khusus untuk teks)
·               read (nama_variabel_file, nama_variabel) : membaca file
·               readln (nama_variabel_file, nama_variabel) : membaca file
·               seek (nama_variabel_file, N); Menempatkan pointer ke posisi record ke-N
·               filepos(nama_variabel_file); Untuk menunjukkan nomor record, dimulai dari 0;
·               filesize (nama_variabel_file); Mengetahui jumlah record yang ada pada suatu file (file=0 untuk file yang baru dibuat)
·               eof(nama_variabel_file); Untuk menunjukkan akhir dari suatu kalimat.
·               truncate (nama_variabel_file); Untuk menghapus sebagian file

Berikut screen shoot dari program yang menggunakan file :



untuk source codenya silahkan download via link dibawah :
via MC | via MF


Monday, April 20, 2015

Program Linked List pada Pascal

         Secara sederhana Linked List merupakan salah satu struktur data dasar yang sangat fundamental dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat menimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian program (run-time).
Pada array, apabila programmer ingin menyimpan data, programmer diharuskan untuk mendefinisikan besar array terlebih dahulu, seringkali programmer mengalokasikan array yang sangat besar(misal 100). Hal ini tidak efektif karena seringkali yang dipakai tidak sebesar itu. Dan apabila programmer ingin menyimpan data lebih dari seratus data, maka hal itu tidak dapat dimungkinkan karena sifat array yang besarnya statik. Linked list adalah salah satu struktur data yang mampu menutupi kelemahan tersebut.
Secara umum linked list tersusun atas sejumlah bagian-bagian data yang lebih kecil yang terhubung (biasanya melalui pointer). Linked list dapat divisualisasikan seperti kereta, bagian kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan pengait antar gerbong adalah pointer.


Berikut contoh SS Program sederhana yang menggunakan Linked List: 





Wednesday, April 15, 2015

Melihat Alamat Memori Suatu Variabel Pada Pascal


         Data akan disimpan pada sebuah variabel berdasarkan tipe data yang dimilikinya dalam memori. Setiap memori juga memiliki alamatnya masing-masing berupa gabungan dari deretan angka, mulai dari angka negatif sampai angka positif. Dalam bahasa pascal, untuk melihat alamat variabel yang digunakan untuk menyimpan suatu data dapat dilakukan dengan bantuan pointer yang menunjuk nama variabel dan menambahkan simbol @ di depan nama variabel.



Contoh:

pointer_nama := @nama;

Untuk contoh programnya bisa download lewat link dibawah.





Sunday, April 12, 2015

Pointer Pada Pascal

        Untuk mendefinisikan struktur data dinamis, digunakan tipe pointer. Pointer adalah variabel yang digunakan untuk menyimpan lokasi data pada memori. Karena setiap tipe data membutuhkan ukuran memori yang berbeda untuk menyimpannya, maka pointer dan tipe data acunya harus ditentukan terlebih dahulu. Hal ini dilakukan dengan mendefinisikan sebuah pointer yang menunjuk pada sebuah tipe data tertentu. Berikut ini aturan pendeklarasian pointer : 

Type
     nama_pointer = ^tipe_data;

atau

Var
     nama_variabel : ^tipe_data;

    
          Tanda caret (^), pada pendeklarasian tersebut dibaca "mengacu pada" dan menunjukan bahwa tipe pointer tersebut mengacu pada tipe data uang digunakan . Sebelum menggunakan tipe pointer, pada program perlu menggunakan perintah  new(nama_pointer);. Hal tersebut diperlukan  untuk melakukan pengalokasian memori (memory allocation).

Contoh program sederhana menggunakan pointer, silahkan
unduh disini

Saturday, April 4, 2015

Sequential dan Binary Search Dalam Pascal



           Pada postingan kali ini saya akan membahas tentang metode searching sequential dan juga binary. Seperti yang kita tahu bahwa pencarian digunakan untuk memudahkan kita untuk mencari sebuah atau beberapa data di antara banyaknya data yang ada. Agar kita tidak susah dalam melakukan pencarian data tersebut, maka di gunakanlah metode pencarian. Langsung saja ke penjelasan tentang sqeuntial search dan binary search dibawah :



SEQUENTIAL SEARCH



    Algoritma sequential search adalah salah satu algoritma yang digunakan untuk memecahkan masalah pencarian data pada suatu data larik/array. Cara kerja dari algoritma ini adalah dengan menelusuri elemen-elemen array dari awal sampai akhir, dimana data tidak perlu diurutkan terlebih dahulu. Kemungkinan terbaik(best case) dari algoritma ini adalah jika data yang dicari berada pada elemen array yang terdepan sehingga waktu yang dibutuhkan untuk pencarian data semakin singkat. Sebaliknya, akan mencapai kondisi terburuk(wors case) apabila data yang dicari berada pada elemen akhir.


Metode pencarian beruntun atau linear (sequential search) dapat dipergunakan apabila:



  1. Nilai-nilai tersebut belum berurutan.
  2. Nilai-nilai tersebut sudah berurutan, tetapi struktur data yang dipergunakan untuk menyimpan nilai-nilai tersebut adalah linked list. 

Berikut contoh implementasinya dalam bahasa Pascal : 


function sequen(xx: integer): integer;
var i: integer;
begin
        i:=1;
        while ((i<n) and (tabint[i]<>xx)) do
        i:= i+1;
                if tabint[i]= xx then
                        sequen:=i
                else
                        sequen:=0;
end;


BINARY SEARCH

        Binary search adalah algoritma pencarian untuk data yang terurut. Pencarian dilakukan dengan cara menebak apakah data yang dicari berada ditengah-tengah data, kemudian membandingkan data yang dicari dengan data yang ada ditengah. Bila data yang ditengah sama dengan data yang dicari, berarti data ditemukan. Namun, bila data yang ditengah lebih besar dari data yang dicari, maka dapat dipastikan bahwa data yang dicari kemungkinan berada disebelah kiri dari data tengah dan data disebelah kanan data tengah dapat diabai. Upper bound dari bagian data kiri yang baru adalah indeks dari data tengah itu sendiri. Sebaliknya, bila data yang ditengah lebih kecil dari data yang dicari, maka dapat dipastikan bahwa data yang dicari kemungkinan besar berada disebelah kanan dari data tengah. Lower bound dari data disebelah kanan dari data tengah adalah indeks dari data tengah itu sendiri ditambah 1. Demikian seterusnya.
Metode pencarian beruntun (sequential) maupun metode pencarian biner (binary search)dapat dipergunakan, jika:
  1. Nilai-nilai tersebut sudah tersusun secara berurutan.
  2. Nilai-nilai tersebut disusun ke dalam bentuk array atau struktur data sejenis yang masing-masing nilai tersimpan dalam bagian-bagian yang mempunyai indeks yang unik dan indeksnya berurutan dari yang paling kecil hingga yang paling besar (bersifat ordinal).

Berikur contoh implementasi binary search dalam bahasa Pascal :

function binary(xx: integer):integer;
var

        ats,bwh,tngh: integer;
        ketemu:boolean;
        indeksxx: integer;
begin
        ats:= 1;
        bwh:= n;
        ketemu :=false;
        indeksxx := 0;

while ((ats <= bwh) and (not ketemu)) do
begin
        tngh:= (ats+bwh) div 2;
        if xx = tabint[tngh] then
        begin
                ketemu := true;
                indeksxx := tngh;
        end
        else
        begin
                if xx = tabint[tngh] then
                   bwh :=  tngh-1
                else
                   ats := tngh+1;
        end;
end;
binary:=indeksxx;
end;



Untuk versi lengkapnya bisa download pada link di bawah:
atau

Tuesday, March 31, 2015

Insertion Sort Pada Pascal

       Insertion Sort merupakan algoritma yang efisien untuk mengurutkan angka yang mempunyai jumlah elemen sedikit. Dimana Input adalah deretan angka sejumlah n buah,  Output adalah permutasi (pengurutan) sejumlah n angka dari input yang sudah terurut secara ascending maupun descending .

           Metode penyisipan (Insertion sort) bertujuan untuk menjadikan bagian sisi kiri array terurutkan sampai dengan seluruh array berhasil diurutkan. Metode ini mengurutkan bilangan-bilangan yang telah dibaca, kemudian berikutnya secara berulang akan menyisipkan bilangan-bilangan dalam array yang belum terbaca ke sisi kiri array yang telah terurut. 

          Insertion Sort bekerja seperti banyak orang yang sedang mengurutkan kartu di tangan. Dimulai dengan tangan kiri yang kosong dan kartunya tertumpuk di meja. Selanjutnya kita ambil satu persatu kartu di meja dan diletakkan di tangan kiri dengan posisi yang benar (terurut). Untuk menemukan posisi yang banar, maka kita harus membandingkan satu persatu kartu yang ada (di tangan kiri) secara berurutan.

Contoh Prosedur yang menggunakan insertion sort : 
 Procedure insertion(numbers : array of integer; n :integer);
 var i,j,index : integer;

 begin
    for i:= 2 to n-1 do
    begin
          index:= numbers[i];
          j:=i;
          while (j>1) and (numbers[j-1] > index) do
          begin
               numbers[j]:= numbers [j-1];
               j:= j-1;
          end;
     numbers[j]:=index;
     end;
end;




Contoh program yang menggunakan pengurutan insertion sort seperti gambar dibawah ini yang merupakan program perankingan :

Untuk program diatas bisa download di sini

Mau request program? silahkan berkomentar di bawah ^^

Sunday, March 29, 2015

Pengurutan Berdasarkan Abjad Pascal

    Pada postingan sebelumnya saya sudah sempat membahas mengenai sorting menggunakan metode bubble sort. Tidak hanya bisa untuk mengurutkan data yang berupa angka, teknik sorting juga bisa digunakan untuk mengurutkan data yang berupa huruf atau karakter baik secara ascending (menaik) ataupun descending (menurun). Meskipun metode bubble sort jika dibandingkan dengan metode sorting lainnya bisa dikatakan kurang efisien dalam penggunanaannya namun metode ini cukup sering digunakan karena alasan lebih mudahnya dari pada metode sorting yang lain dalam hal pendeklarasiaannya.

            Contoh potongan program yang menggunakan metode bubble sort :  


 for i:= 1 to n-1 do
 begin
     for j:= i to n do
     begin
          if a[j] < a[i] then
          begin
               tukar:=a[j];
               a[j]:=a[i];
               a[i]:=tukar;
          end;
     end;
 end;

 for i:= 1 to n do
 begin
        writeln('Nama ke-',i:2,' : ',a[i]);
 end;
       



Untuk program lengkapnya bisa lihat di sini

Saturday, March 28, 2015

Metode Heap Sort Pascal

    
           Pengertian Heap dalah struktur data yang berbentuk pohon yang memenuhi sifat-sifat heap yaitu jika B adalah anak dari A, maka nilai yang tersimpan di simpul A lebih besar atau sama dengan nilai yang tersimpan di simpul B. Hal ini mengakibatkan elemen dengan nilai terbesar selalu berada pada posisi akar, dan heap ini disebut Max Heap. (Bila perbandingannya diterbalikkan yaitu elemen terkecilnya selalu berada di simpul akar, heap ini disebut adalah Min Heap.



           Karena itulah, heap biasa dipakai untuk mengimplementasikan priority queue. Operasi-operasi yang digunakan untuk heap adalah: 

• Delete-max atau delete-min: menghapus simpul akar dari sebuah max atau min heap.

• Increase-key atau decrease-key: mengubah nilai yang tersimpan di suatu simpul.

• Insert: menambahkan sebuah nilai ke dalam heap.


• Merge:menggabungkan dua buah heap untuk membentuk sebuah heap baru yang berisi semua             elemen pembentuk heap tersebut. 


          Heap sort adalah algoritma pengurutan data berdasarkan perbandingan, dan termasuk golongan selection sort. Walaupun lebih lambat daripada quick sort pada kebanyakan mesin , tetapi heap sort mempunyai keunggulan yaitu kompleksitas algoritma pada kasus terburuk adalah n log n. Algoritma pengurutan heap sort ini mengurutkan isi suatu larik masukan dengan memandang larik masukan sebagai suatu Complete Binary Tree (CBT). Setelah itu Complete Binary Tree (CBT) ini dapat dikonversi menjadi suatu heap tree. Setelah itu Complete Binary Tree (CBT) diubah menjadi suatu priority queue. 


           Algoritma pengurutan heap dimulai dari membangun sebuah heap dari kumpulan data yang ingin diurutkan, dan kemudian menghapus data yang mempunyai nilai tertinggi dan menempatkan dalam akhir dari larik yang telah terurut. Setelah memindahkan data dengan nilai terbesar, proses berikutnya adalah membangun ulang heap dan memindahkan nilai terbesar pada heap tersebut dan menempatkannya dalam tempat terakhir pada larik terurut yang belum diisi data lain. Proses ini berulang sampai tidak ada lagi data yang tersisa dalam heap dan larik yang terurut penuh. Dalam implementasinya kita membutuhkan dua larik – satu untuk menyimpan heap dan satu lagi untuk menyimpan data yang sudah terurut. Tetapi untuk optimasi memori, kita dapat menggunakan hanya satu larik saja. Yaitu dengan cara menukar isi akar dengan elemen terakhir dalam heap tree. Jika memori tidak menjadi masalah maka dapat tetap menggunakan dua larik yaitu larik masukan dan larik hasil. Heap Sort memasukkan data masukan ke dalam struktur data heap. Nilai terbesar (dalam max-heap) atau nilai terkecil (dalam min-heap) diambil satu per satu sampai habis, nilai tersebut diambil dalam urutan yang terurut.

Contoh Program Menggunakan Heap Sort :

Download file pas nya di sini

Sistem Ranking dengan Bubble Sort Pascal

        



       Metode Pengurutan Gelembung (Bubble Sort) ini diinspirasi oleh gelembung sabun yang berada di permukaan air. Karena berat jenis gelembung sabun lebih ringan dibandingkan dengan berat jenis air, sehingga gelembung sabun selalu terapung di permukaan air. Prinsip pengapungan inilah yang diterapkan ke metode ini, dimana nilai yang paling rendah berada diposisi paling atas, melalui proses pertukaran.

           Konsep dasar dari metode ini adalah setiap data yang ada di kumpulan, dibandingkan dengan data-data lainnya, artinya jika jumlah data sebanyak 5, makaakan terjadi pembandingan sebanyak (5-1)2 = 16 kali. Untuk satu data, akan dibandingakan sebanyak 4 kali terhadap data yang lainnya. Atau secara umum dapat ditarik rumus, untuk jumlah data sebanyak n buah, maka: 

jumlah iterasi pembandingan = (n -1)^2 .

Jika data-data tersebut disimpan di dalam lari L, maka:
1. untuk pengurutan menaik, pembandingannya sebagai berikut:
                                           L[n] < L[n -1]

2. untuk pengurutan menurun, pembandingannya sebagai berikut:
                                          L[n] > L[n -1] 

Jika kondisi di atas terpenuhi, maka nilai data yang ada di indeks n-1 akan ditukar
dengan nilai data yang ada di indeks n.


Contoh Program bubble sort : 

Procedure Bubble(numbers: array of integer;size:integer);
var i,j,temp : integer;
begin
     for i:= size-1 downto 1 do
         for j:= 2 to i do
         if numbers[j-1] > numbers[j] then
         begin
               temp:= numbers[j-1];
               numbers[j-1]:= numbers[j];
               numbers[j]:= temp;
         end;
end;


Untuk contoh program lengkapnya bisa download di bawah ini:

Tuesday, March 24, 2015

Program Pola Bilangan Segitiga Dengan Pascal


Apa itu pola bilangan segitiga? Daripada bingung-bingung, kaya gini nih contoh pola bilangan segitiga:
1 , 3 , 6 , 10 , 15 , 21 , 28 , . . . .

Kenapa sih disebut pola bilangan segitiga? Hmmm, kenapa yah? coba dech perhatikan kalo bilangan diatas disusun akan menjadi seperti ini:

Pola bilangan tersebut dapat dibuat algoritmanya dengan rumus seperti di bawah :
1 \rightarrow 1 = \frac{1}{2} \times 1 (1+1)
2 \rightarrow 3 = \frac {1}{2} \times 2 (2+1)
3 \rightarrow 6 = \frac {1}{2} \times 3 (3+1)
4 \rightarrow 10 = \frac {1}{2} \times 4(4+1)
5 \rightarrow 15 = \frac {1}{2} \times 5(5+1)
6 \rightarrow 21 = \frac{1}{2} \times 6(6+1)
\vdots
n \rightarrow \frac {1}{2} \times n(n+1)


Berhubung saya lagi banyak kerjaan dan buru-buru ngeposting ini, untuk codingan full nya bisa didownload via link di bawah ini  :

1. Pola Bilangan Segitiga Rekursif

2. Pola Bilangan Segitiga Non rekursif





Thursday, March 19, 2015

Bilangan Fibonacci Pascal

       Bilangan Fibonacci adalah kumpulan bilangan yang merupakan hasil dari penjumlahan dua suku bilangan sebelumnya. Misalnya 0, 1, 1, 2, 3, 5, 8, 13, ..., n. Angka yang bergaris bawah adalah angka yang merupakan hasil penjumlahan dua suku sebelumnya. Dimulai dari 1 yang merupakan hasil dari 1 + 0, kemudian 2 yang merupakan hasil dari 1+1, 3 yang merupakan hasil dari 1+2, dan seterusnya. Dalam bahasa pascal, bilangan fibonacci dapat dirumuskan menggunakan rekursif (perulangan menggunakan sub program). Berikut source code dari program fibonacci menggunakan rekursif :


uses crt;

function fib(n:integer):integer;
begin
        if (n=0) then
                fib:=0

        else if (n=1) then
                fib:=1
        else
                fib:=fib(n-1)+fib(n-2);
end;


var  i,a:integer;
begin

        clrscr;
        writeln('Program Bilangan Fobonacci');
        writeln('----------------------------------'); writeln ;
        write('Inputkan Angka     : '); readln(a);
        write('Bilangan Fibonacci : ');
        for i:=0 to a-1 do
        write(fib(i), ' ');
        readln;

end.


Hasil dari program tersebut : 



Wednesday, March 18, 2015

Mencari Faktorial Menggunakan Fungsi Rekursif Pascal

        Salah satu contoh program yang menggunakan rekursif adalah faktorial, berikut ini contoh source codenya.


uses crt;

var n:integer;

function faktorial (n : integer):integer;
begin
        if (n=0) then
             faktorial:=1
        else
             faktorial:=n*faktorial(n-1);
end;

begin
clrscr;
        write('Masukan Angka : '); readln(n);
        writeln ('Hasil ',n,'! : ',faktorial(n));
 readln;
 end.


        Program rekursif untuk mencari nilai faktorial seperti di atas termasuk program yang sederhana. Pada program tersebut hanya menggunakan satu buah fungsi dan fungsi tersebut hanya mempunya satu buah parameter. Pada fungsi faktorial di atas terdapat pernyataan jika nilai n>0 maka program akan menjalankan perintah faktorial:=n*faktorial(n-1); . Hal itu berarti jika nilai n yang diinputkan lebih dari 0 maka program akan menjalankan perintah untuk mengalikan n dengan nilai n itu sendiri dikurang 1. Misalnya nilai n = 5, maka program akan melakukan operasi seperti berikut : 

                                                    faktorial:= 5 *4*3*2*1 

Tampilan hasil dari program di atas dapat dilihat pada gambar di bawah ini :




Masih seputar program rekursif, lihat juga : Bilangan Fibonacci


Sub Program Rekursif Pascal

Sebuah objek disebut berulang (rekursif, recursive) jika setiap objek mengandung dirinya sendiri atau didefinisikan dengan dirinya sendiri. Dalam matematika, definisi rekursif sebuah fungsi adalah definisi fungsi yang menggunakan fungsi tersebut.
Kegunaan hubungan berulang terletak pada kemampuannya yang memungkinkan menyatakan definisi yang tak hingga (indefinite) dengan pernyataan yang hingga (finite). Algoritma rekursif memungkinkan perulangan yang tidak akan berhenti atau tak hingga. Karenanya, untuk memecahkan masalah menggunakan hubungan berulang, harus ditemukan basis, yaitu kondisi berhenti (termination) rekursif yang jelas dan definisi rekursif. Implementasi definisi rekursif dapat berbentuk fungsi rekursif atau prosedur rekursif.
Jika sebuah masalah telah didefinisikan secara rekursif, maka penggunaan algoritma rekursif akan memudahkan dalam membuat program dan program akan lebih mudah dibaca, meskipun ada kemungkinan dalam eksekusinya menjadi tidak efesien. Tetapi, jika sebuah masalah dapat diselesaikan tanpa hubungan rekursif dan algoritmanya tidak menjadi rumit, pendekatan tersebut biasanya lebih baik.
Sub program rekursif adalah sub program yang memanggil dirinya sendiri selama kondisi dipenuhi. Dengan melihat sifat sub program rekursif di atas maka sub program rekursif harus memiliki :
1.     Kondisi yang menyebabkan pemanggilan dirinya berhenti (disebut kondisi khusus atau special condition)
2.     Pemanggilan diri sub program (yaitu bila kondisi khusus tidak dipenuhi)
Secara umum bentuk dari sub program rekursif memiliki statement kondisional :
·       If kondisi khusus tak dipenuhi
·       Then panggil diri-sendiri dengan parameter yang sesuai
·       Else lakukan instruksi yang akan dieksekusi bila kondisi khusus dipenuhi
sebuah program rekursif umumnya dipakai untuk permasalahan yang memiliki langkah penyelesaian yang terpola atau langkah-langkah yang teratur. Bila kita memiliki suatu permasalahan dan kita mengetahui algoritma penyelesaiannya, kadang-kadang sub program rekursif menjadi pilihan kita bila memang memungkinkan untuk dipergunakan. Secara algoritmis (dari segi algoritma, yaitu bila kita mempertimbangkan penggunaan memori, waktu eksekusi sub program) sub program rekursif sering bersifat tidak efisien.
Dengan demikian sub program rekursif umumnya memiliki efisiensi  dalam penulisan perintah, tetapi kadang tidak efisien secara algoritmis. Meskipun demikian banyak pula permasalahan-permasalahan yang lebih sesuai diselesaikan dengan cara rekursif.

Kelebihan menggunakan rekursif :
  1. Sangat mudah untuk melakukan perulangan dengan batasan yang luas dalam artian melakukan perulangan dalam skala yang besar.
  2. Dapat melakukan perulangan dengan batasan fungsi.
Kekurangan menggunakan rekursif :
  1. Tidak bisa melakukan nested loop atau looping bersarang.
  2. Biasanya membuat fungsi sulit dipahami, hanya cocok untuk persualan tertentu saja.
  3. Trace error sulit.
  4. Memerulukan stack yang lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan ditempat ke stack dan ada kalanya akan menyebabkan stack tak cukup lagi (stack over run).
  5. Proses agak berbelit-belit karena terdapat pemanggilan fungsi yang berulang-ulang dan pemanggilan data ditumpuk.

Contoh Programnya bisa lihat: Faktorial Menggunakan Rekursif

Sumber :

Fathul Wahid : Dasar-Dasar Algoritma & Pemrograman

http://khabib.staff.ugm.ac.id/index.php?option=com_content&view=article&id=82:prosedur-dan-fungsi-rekursif&catid=28:introduction-to-algorithm-and-programming

http://array-fitriani-array.blogspot.com/2011/04/array-rekursif-iteratif.html