Anda di halaman 1dari 18

Rekursif Bahasa Pemrorgraman

PERTEMUAN KE 12
REKURSIF

10.1. Pengertian Rekursif


10.2. Pengertian Teknik Iteratif
10.3. Perbandingan Teknik Rekursif dan Teknik Iteratif
10.4. Algoritma Teknik Rekursif
10.5. Algoritma Teknik Iteratif
10.6. Penerapan Algoritma Rekursif
10.7. Penerapan Algoritma Iteratif
10.8. Soal Latihan

10.1. Pengertian Rekursif


Rekursi adalah konsep satu teknik pemrograman dengan
pengulangan yang penting dalam cara memanggil sebuah fungsi dari
ilmu komputer. Konsep ini dapat dirinya sendiri, baik itu secara
digunakan untuk merumuskan solusi langsung maupun tidak langsung.
sederhana dalam sebuah Pemanggilan fungsi rekursif secara
permasalahan yang sulit untuk langsung berarti dalam fungsi
diselesaikan secara iteratif dengan tersebut terdapat statement untuk
menggunakan loop for, while do. memanggil dirinya sendiri sedangkan
Pada saat tertentu konsep ini secara tidak langsung berarti fungsi
dapat digunakan untuk rekursif tersebut memanggil 1 atau
mendefinisikan permasalahan lebih fungsi lain sebelum memanggil
dengan konsisten dan sederhana. dirinya sendiri.
Pada saat yang lain, rekursi dapat Fungsi rekursif langsung
membantu untuk mengekspresikan merupakan rekursif, jika ekspresi
algoritma dalam sebuah rumusan yang merealisasikan fungsi tersebut
yang menjadikan tampilan algoritma mengandung aplikasi terhadap fungsi
tersebut mudah untuk dianalisa. tersebut.
Rekursif adalah salah satu
metode dalam dunia matematika
dimana definisi sebuah fungsi Realisasi 
mengandung fungsi itu sendiri. F (<list‐param>) 
Dalam dunia pemrograman, rekursi      depend on 
diimplementasikan dalam sebuah     <kondisi‐basis> : <ekspresi‐1> 
fungsi yang memanggil dirinya
sendiri. Atau Rekursif merupakan
2008 | Direktorat Pembinaan SMK 355
 
Bahasa Pemrograman Rekursif

    <kondisi‐rekurensi> : F  program rekursif di atas maka sub


<ekspresi‐2>  program rekursif harus memiliki :
 kondisi yang menyebabkan
Fungsi rekursif tidak langsung pemanggilan dirinya berhenti
merupakan realisasi fungsi yang (disebut kondisi khusus atau
dapat cross-recursif yaitu jika special condition)
realisasi fungsi f mengandung fungsi  pemanggilan diri sub program
g yang realisasinya adalah aplikasi (yaitu bila kondisi khusus tidak
terhadap f. dipenuhi)
Secara umum bentuk dari sub
Realisasi  program rekursif memiliki statemen
G (<list‐param>): F (<ekspresi‐1>)  kondisional :
F (<list‐param>): 
  depend on  if kondisi khusus tak dipenuhi 
   <kondisi‐basis> : <ekspresi‐1>  then  panggil  diri‐sendiri  dengan 
   <kondisi‐rekurensi> : G  parameter yang sesuai  
<ekspresi‐2>  else  lakukan  instruksi  yang  akan 
dieksekusi bila kondisi khusus dipenuhi  
Fungsi merupakan sub program
yang sangat bermanfaat dalam Sub program rekursif umumnya
pemrograman, terutama untuk dipakai untuk permasalahan yang
program atau proyek yang besar. memiliki langkah penyelesaian yang
Manfaat penggunaan subprogram terpola atau langkah-langkah yang
antara lain adalah : teratur. Bila kita memiliki suatu
 Meningkatkan readibility, yaitu permasalahan dan kita mengetahui
mempermudah pembacaan algoritma penyelesaiannya, kadang-
program kadang sub program rekursif menjadi
 Meningkatkan modularity, yaitu pilihan kita bila memang
memecah sesuatu yang besar memungkinkan untuk dipergunakan.
menjadi modul-modul atau bagian- Secara algoritmis (dari segi
bagian yang lebih kecil sesuai algoritma, yaitu bila kita
dengan fungsinya, sehingga mempertimbangkan penggunaan
mempermudah pengecekan, memori, waktu eksekusi sub
testing dan lokalisasi kesalahan. program) sub program rekursif sering
 Meningkatkan reusability, yaitu bersifat tidak efisien .
suatu sub program dapat dipakai Dengan demikian sub program
berulang kali dengan hanya rekursif umumnya memiliki efisiensi
memanggil sub program tersebut dalam penulisan perintah, tetapi
tanpa menuliskan perintah- kadang tidak efisien secara
perintah yang semestinya diulang- algoritmis. Meskipun demikian
ulang. banyak pula permasalahan-
Sub Program Rekursif adalah permasalahan yang lebih sesuai
subprogram yang memanggil dirinya diselesaikan dengan cara rekursif
sendiri selama kondisi pemanggilan (misalnya dalam pencarian/
dipenuhi. Dengan melihat sifat sub searching).

356 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

Untuk dapat memahami proses 4 dan b = 2 . Baris berikutnya


yang terjadi dalam sebuah fungsi menampilkan nilai a dan b ke layar
rekursif , perhatikan contoh fungsi (printf cout<<"Masuk \ n"<<a <<b;).
rekursif berikut : Kemudian panggil fungsi rekursi
dengan nilai a = 4 dan b = 2 .
Langkah – langkah tersebut diulang
void rekursi (int a, int b)  terus sampai pemanggilan fungsi
{  rekursi dengan nilai a = 6 dan b = 0.
  If (b==0) return;  Pada saat ini kondisi if bernilai benar
  a++;  sehingga fungsi akan keluar (return)
  b‐‐;  dan melanjutkan perintah setelah
  cout<<"Masuk   \ n"<<a <<b;  pemanggilan fungsi rekursi dengan a
  rekursi(a,b);  = 6 dan b = 0. Yaitu mencetak nilai a
  cout<<"Keluar \ n"<<a <<b;  dan b (cout<<"Keluar \n"<<a << b;).
Setelah mencetak nilai a dan b

maka fungsi rekursif akan keluar lagi
, dan melanjutkan perintah setelah
pemanggilan fungsi rekursif
Misalkan Fungsi tersebut
sebelumnya dimana nilai a = 5 dan b
dipanggil dengan nilai a = 3 dan b = 3
=1.
maka pertama tama di cek apakah b
Demikian seterusnya sampai nilai a =
= 0 (if (b == 0) return), jika sama
4 dan nilai b = 2. yang tidak lain
maka keluar. Ternyata nilai b tidak
pemanggilan fungsi rekurif yang
sama dengan 0 maka tambahkan a
pertama. Proses pemanggilan fungsi
dengan 1 dan kurangi b dengan 1.
rekursif dapat diilustrasikan:
Maka keadaan sekarang menjadi a =

      Langkah ke:  
  Rekursif (3,3)    1  a=4 ; b=2 . Cetak : masuk  a=4 || b=2 
1    6  2  a=5 ; b=1 . Cetak : masuk  a=5 || b=1 
  Rekursif (4,2)    3  a=6 ; b=0 . Cetak : masuk  a=6 || b=0 
2    5  4  a=6 ; b=0 . Cetak : keluar   a=6 || b=0 
  Rekursif (5,1)    5  a=5 ; b=1 . Cetak : keluar   a=5 || b=1 
3    4  6  a=4 ; b=2 . Cetak : keluar   a=4 || b=2 
  Rekursif (6,0)       

Gambar 10.1. Proses Pemanggilan Fungsi Rekursif

Penggunaan fungsi rekursif fungsi pangkat xy , kita tahu bahwa


misalnya pada fungsi pangkat, semua bilangan selain 0, jika
faktorial, dan barisan fibonacci. Mari dipangkatkan dengan 0 nilainya
kita lihat satu demi satu. Dalam sama dengan 1. Jika x dipangkatkan

2008 | Direktorat Pembinaan SMK 357


 
Bahasa Pemrograman Rekursif

dengan y, dengan y lebih dari 0, formula. Konsep ini pun difasilitasi


maka hasilnya sama dengan x dalam pemrograman.
dikalikan dengan x dipangkatkan y – Dalam pemrograman, ada 2
1. Jika dituliskan dalam notasi terminologi yang bisa didefinisikan
matematika definisinya adalah dengan rekursif, yaitu prosedur dan
sebagai berikut: fungsi. Seperti halnya dalam bidang
matematika, penggunaan konsep ini
juga untuk memudahkan
pendefinisian dua terminologi
tersebut. Bahkan terdapat suatu
masalah yang hanya bisa
diselesaikan dengan rekursifitas dan
Kita lihat di atas pada definisi y > sangat sulit untuk diselesaikan tanpa
0, bentuk pemangkatan muncul rekursifitas.
kembali di sisi kanan. Itulah yang Definisi rekursif harus memuat
disebut rekursif. Definisi rekursif komponen basis dan komponen
selalu dimulai dengan kasus rekursif. Dalam pemrograman,
penyetop, penghenti, atau kasus komponen ini dapat dipisahkan
dasar dari suatu permasalahan, dengan menggunakan perintah
dalam hal ini terjadi ketika nilai y = analisa kasus. Misalkan e1 adalah
0. Definisi rekursif yang lebih ekspresi kondisi untuk basis dan e2
kompleks mengandung inti dari adalah ekspresi kondisi untuk bagian
permasalahan yang akan rekursif, definisi rekursif dapat
dipecahkan, namun lebih sederhana. dituliskan:
Dalam hal ini yang tadinya x
dipangkatkan dengan y, kini bentuk if (e1) then 
pemangkatan menjadi lebih     {bagian basis} 
sederhana, yaitu y – 1. Hal ini else 
dimaksudkan untuk “menggiring”     {bagian rekursif} 
masalah kompleks ke kasus dasar
atau penyetop rekursinya. Untuk x = Salah satu contoh dari kasus
10 dan y = 0, hasil dari xy adalah 1. rekursif adalah barisan bilangan
Untuk x = 10 dan y = 3 hasilnya fibonacci. Barisan bilangan fibonacci
dapat digambarkan sebagai berikut: adalah 1, 1, 2, 3, 5, 8, 13, 21, ... .
Konsep rekursifitas banyak Definisi barisan bilangan fibonacci
ditemui di dunia nyata. Istilah ini adalah sebagai berikut. Misalkan
muncul pertama kali di kajian bidang fibonacci(i) menyatakan bilangan
matematika. Dalam kasus tertentu, fibonacci yang ke-i, maka:
konsep ini memudahkan perumusan

 fibonacci(i  1)  fibobacci(i  2) , i  2
fibonacci(i)  
 1 , i  1,2

358 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

Program 10.1. Penerapan bilangan Fibonaci dengan rekursi


#include <iostream> 
#include<conio.h> 
 
using namespace std; 
 
int Fibonaci(int); 
 
int main() 

 
  int n=7; 
  for (int i=1; i<=n; i++) 
    cout<<" \ndata "<< Fibonaci(i); 
  getch(); 
    return 0; 

 
int Fibonaci(int n) 

  if (n<=2) 
  return n; 
  else 
  return(Fibonaci(n‐2)+Fibonaci(n‐1)); 

Keluaran program diatas adalah:


data 1 
data 2 
data 3 
data 5 
data 8 
data 13 
data 21 

Rekursif adalah suatu method program secara natural, langsung,


yang memanggil dirinya sendiri dan simple dalam memecahkan
secara langsung maupun tidak problem yang susah dipecahkan.
lansung. Rekursif merupakan teknik Untuk lebih memahami rekursif
pemrograman yang sangat berguna. perhatikan contoh berikut: Contoh
Dalam beberapa kasus, yang umum untuk memahami teknik
menggunakan cara rekursi rekursif adalah masalah factorial.
memudahkan pengembangan  
2008 | Direktorat Pembinaan SMK 359
 
Bahasa Pemrograman Rekursif

4! = 4 x 3 x 2 x 1  ada terminasinya atau ada saat


3! = 3 x 2 x 1  berhentinya. Pada contoh factorial ini
2! = 2 x 1  adalah 0!. Yaitu sama dengan 1
1! = 1  bukan 0. Dalam istilah matematika 0!
ini disebut dengan base step.
Dari contoh di atas bisa diubah Sedangkan bagian yang lain disebut
cara pandangnya menjadi: recursive step. Secara umum rumus
factorial dalam bentuk rekursif
4! = 4 x 3!  menjadi sebagai berikut:
3! = 3 x 2! 
2! = 2 x 1!  0! = 1;    base step 
1! = 1  n! = n x (n – 1)!; n > 0   recursive step 

Dengan catatan bahwa 0! = 1 Jadi proses rekursif itu akan


maka cara pandang yang kedua bisa selalu memanggil dirinya sendiri
dlanjutkan menjadi: dengan variable yang berbeda, dan
terus dilakukan sampai mencapai
4! = 4 x 3!  base step sebagai terminasinya.
Setelah terminasi maka akan
3! = 3 x 2! 
mendapatkan hasil dan selanjutnya
2! = 2 x 1! 
hasil tersebut dikembalikan ke
1! = 1  pemanggilnya untuk dilakukan
0! = 1  perhitungan. Hal itu dilanjutkan
sampai ke pemanggil yang pertama
Cara pandang yang kedua inilah sehingga mendapatkan hasil
yang disebut rekursif, karena dalam sebagaimana mestinya. Ilustrasi
proses perhitungan selalu memanggil berikut memberi gambaran tentang
dirinya sendiri. Yaitu factorial proses rekursif.
memanggil factorial. Akan tetapi perlu
dicatat bahwa teknik rekursif ini harus

360 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

 
4!  =  4 x  3!  6 

 
3!  =  3 x  2!  2 

 
2!  =  2 x  1!  1 

 
1!  =  1 x  0!  1 

0!  =  1 

Gambar 10.2. Ilustrasi Tentang Proses Rekursif.

10.2. Pengertian Teknik Iteratif


Teknik Iteratif adalah teknik 4! = 4 x 3 x 2 x 1 
perulangan atau menghitung secara 3! = 3 x 2 x 1 
berulang. Teknik ini memanfaatkan 2! = 2 x 1 
kelebihan komputer sebagai mesin 1! = 1 
hitung yang mampu melakukan Untuk menghitung n! berarti
perhitungan secara berulang dengan mengkalikan bilangan bulat positif
perintah yang sangat sederhana. dari 1 sampai dengan n. Pengertian
Cara ini mudah dilakukan akan penghitunganannya terlihat mudah,
tetapi memerlukan proses yang namun jika n bilangan yang besar jika
panjang untuk mendapatkan hasil, dihitung tanpa komputer akan sangat
dan cara ini menggunakan memori sulit dan lama.
langsung. Contoh factorial cara Kebanyakan pemrogram pemula
pandang yang pertama menggunakan cara ini karena lebih
menggunakan teknik iteratif jelas algoritmanya.

10.3. Perbandingan Teknik Rekursif dan Teknik Iteratif


Teknik Iteratif lebih mudah kurang(-), bagi(/), kali(*), kadangkala
dimengerti karena jelas tinggal juga pangkat atau yang lainnya
mengurutkan angka-angkanya dari 1 namun dapat dikembalikan ke empat
atau mungkin 0 sampai dengan n. operasi dasar pertama. Kerugian
Operasi yang terjadi bisa tambah(+), yang pertama teknik ini

2008 | Direktorat Pembinaan SMK 361


 
Bahasa Pemrograman Rekursif

membutuhkan memori yang banyak harus repot‐repot menggunakan


terutama untuk bilangan yang besar. rekursif? Memang benar bahwa
Yang kedua proses iterasi bisa semua fungsi rekursif dapat dibuat
membutuhkan waktu yang lama versi iterasinya. Namun demikian,
apabila bilangannya besar. ada beberapa masalah yang jauh
Sedang Teknik Rekursif harus lebih mudah jika dipecahkan dengan
tahu formulanya dahulu, dalam hal ini rekursif. Kode program untuk
mana base step-nya, dan mana beberapa masalah rekursif juga relatif
rekursif step-nya. Biasa dipakai oleh lebih mudah dipahami dibandingkan
pemrogram yang sudah agak lanjut versi iterasinya. Berikut adalah versi
dan operasi matematikanya iteratif dari fungsi pangkat.
merupakan operator biasa. Namun Sekaranng perhatikan pada aplikasi
memori yang digunakan bukan permainan menara Hanoi di bawah
memori langsung penampung ini
variable namun merupakan stack. Menara Hanoi ialah salah satu
Jadi banyak sedikitnya penghitungan permainan yang dulunya dimainkan
tergantung dari besarnya kapasitas oleh seorang pendeta di Hanoi.
stack yang dipunyai komputer. Tujuan permainan ini ialah
Secara rata-rata proses memindahkan n buah pringan dari
panghitungan dengan rekursif akan tonggak asal (A) melalui tonggak
lebih cepat karena kompleksitasnya bantu (B) menuju tonggak tujuan (C).
lebih kecil dibanding dengan iteratif. Dengan aturan–aturan bahwa
Kadang seseorang bertanya, loh piringan yang lebih kecil tidak boleh
saya kan juga bisa membuat fungsi berada di bawah piringan yang lebih
pangkat di atas dengan besar.
menggunakan teknik iteratif. Misalnya
menggunakan while loop. Kenapa

Menara A B C :

a b c

Gambar 10.3. Menara dengan Tiga Piringan

362 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

Seperti biasa untuk memecahkan sampai (n-1) tersebut dari tonggak


masalah kita daftarkan dulu langkah- bantu (B) ke tonggak tujuan (C).
langkah yang diambil mulai n = 1. Nah bagaimana caranya
Dengan dfinisi piringan yang paling membawa piringan ke 1 sampai (N-1)
atas ialah piringan 1. dari tonggak asal ke tonggak bantu
(B), caranya sama saja yaitu dengan
Untuk n = 1 : memindahkan piringan ke (n-1) dari
 Pindahkan piringan 1 dari A ke C tonggak asal (A) ke tonggak tujuan
Untuk n = 2 : yang pada saat ini berada pada
 Pindahkan piringan 1 dari A ke B tonggak (B) sedangkan piringan dari
 Pindahkan piringan 2 dari A ke C 1 sampai ke (N-2) dipindahkan ke
 Pindahkan piringan 3 dari B ke C tonggak bantu yang saat ini berada di
tonggak (C) , Setelah piringan ke 1
Dari contoh diatas dapat diambil sampai (N-2) berada pada tonggak
kesimpulan , untuk memindahkan N bantu (C), kemudian pindahkan
piringan dari tonggak asal (A) ke piringan ke 1 sampai (N-2) ke
tonggak tujuan (C) maka piringan ke tonggak tujuan (B) dan seterusnya.
N harus berada di tonggak tujuan (C), Metode penyelesaian permainan
sedangkan piringan ke 1 sampai (N - Hanoi di atas sering disebut sebagai
1) harus berada di tonggak bantu (B). metode back tracking, jadi solusi
Setelah piringan ke 1 sampai (N-1) dicari dengan cara mundur ke
berada pada tonggak bantu (B), belakang dahulu, baru kemudian
kemudian pindahkan piringan ke 1 solusi bisa ditemukan. Berikut Listing
program Menara Hanoi dalam
bahasa C

Program 10.2
include <stdio.h> 
 
void Hanoi(int n,char asal,char bantu, char tujuan)  
            // pindahkan piringan ke n 
{            // dari asal menuju tujuan 
            // melalui bantu 
  if (n == 0) return; 
  Hanoi(n‐1,asal,tujuan,bantu);    // pindahkan piringan ke n‐1 
            // dari asal ke bantu melalui 
            // tonggak tujuan 
 
  printf("Pindah piring ke %d ke dari %c ke %c\n",n,asal,tujuan); 
  Hanoi(n‐1,bantu,asal,tujuan)  // pindahkan piringan ke n ‐ 1 
 
            // dari bantu menuju tujuan 
            // melalu asal 

2008 | Direktorat Pembinaan SMK 363


 
Bahasa Pemrograman Rekursif

 
int main(void) 

  int n; 
  printf("Jumlah piringan ? "); 
  scanf("%d",&n); 
  Hanoi(n,'a','b','c'); 
  return 0; 

10.4. Algoritma Teknik Rekursif


Telah disinggung di depan untuk 0! = 1; base step
Teknik Rekursif harus dicari mana n! = n x (n – 1)!; n > 0 recursive step
base step-nya dan mana rekursif
step-nya. Dari problem yang hendak Pseudocode-nya:
dipecahkan dicari dahulu keduanya.
Apabila sudah ketemu baru Int Faktorial(int n) 
melangkah ke prose berikutnya yaitu { 
menentukan pseudocode-nya,      If (n==0) 
sekaligus menentukan apakah           Return 1; 
memakai procedure atau function.      Else 
Untuk Teknik Rekursif ini lebih           Return n * Faktorial(n‐1) 
cocok memakai function, karena } 
harus bisa dipanggil di dalam
program tersebut. Sebagai contoh Jika dijalankan gambaran prosesnya
mencari faktorial seperti di atas. sebagai berikut: Misal untuk
Algoritma rekursifnya sebagai berikut: menghitung 4!

364 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

Faktorial(4) 

4 x Faktorial(3) 

3 x Faktorial(2) 

2 x Faktorial(1) 

1 x Faktorial(0) 

Gambar 10.4. Ilustrasi Rekursif Untuk Menghitung 4! (faktorial 4)

Dalam hal ini memang untuk rekursif harus memakai function karena
procedure tidak dapat dipanggil di dalam procedure itu sendiri.

10.5. Algoritma Teknik Iteratif


Teknik Iteratif algoritmanya Pseudocode Teknik Iteratif:
seperti apa adanya terlihat jadi tidak
begitu rumit. Pada tulisan di atas int Faktorial(int n) 
telah dijelaskan beberapa contoh { 
menghitung faktorial secara iteratif.     int x = 1; 
Untuk lebih jelasnya lihat contoh     for(int i = 1; i <= n; i++) 
berikut:        x = x * i; 
    return x; 
4! = 4 x 3 x 2 x 1  } 
3! = 3 x 2 x 1 
2! = 2 x 1  Dapat dilihat di atas bahwa
1! = 1  iterasinya adalah mengulang
perkalian x = x * i dari i = 1 sampai
Algoritmanya disini sangat jelas dengan I = n dengan penambahan 1
untuk faktorial menggunakan Teknik setiap perubahan i. Perlu diketahui
Iteratif tinggal mengulang operasi juga untuk harga awal x harus sama
perkalian dari 1 sampai dengan dengan 1, jika tidak diberi harga awal
banyaknya n. maka hasilnya akan salah.
2008 | Direktorat Pembinaan SMK 365
 
Bahasa Pemrograman Rekursif

Jadi jelas sekali perbedaan algoritma Teknik Iteratif.


Teknik Rekursif dengan algoritma

10.6. Penerapan Algoritma Rekursif


Dibawah ini merupakan pemangkatan dan lain sebagainya.
beberapa contoh program rekursif Untuk lebih jelasnya perhatikan
dengan berbagai kasus dilapangan program-program dibawah ini:
seperti faktorial, program

Program 10.3. Faktorial:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int faktorial(int n) 

    if (n==0) 
       return 1; 
    else 
       return n * faktorial(n‐1); 

 
int main(int argc, char *argv[]) 

    int n; 
    cout<<"Program Faktorial Rekursif\n"; 
    cout<<"Masukkan Nilai n : "; 
    cin>>n; 
    cout<<"Faktorial("<<n<<") = "<<faktorial(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
}  

Keluaran program tersebut adalah sebagai berikut:


Program factorial Rekursif 
Masukan Nilai n : 4 
Faktorial (4) = 24 

Program 10.4. Pangkat (an):


#include <cstdlib> 
#include <iostream> 
 
366 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

using namespace std; 
 
float Pangkat(float a, int n) 

    if (n==0) 
       return 1; 
    else 
       return a * Pangkat(a, n‐1); 

 
int main(int argc, char *argv[]) 

    float a; 
    int n; 
    cout<<"Program Pangkat Rekursif\n"; 
    cout<<"Isilah Nilai a = "; 
    cin>>a; 
    cout<<"Isilah Nilai n = "; 
    cin>>n; 
    cout<<"Hasil dari "<<a<<" pangkat "<<n<<" adalah "<<Pangkat(a,n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program di atas seperti berikut:


Program pangkat rekursif 
Istilah Nilai a   = 2 
Istilah Nilai a   = 2 
Hasil dari 2 pangkat  3 adalah 8 

Program 10.5. Menghitung jumlah bilangan Integer positif dari 1 sampai


dengan n secara rekursif.
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int JumlahInt(int n) 

    if (n==1) 
       return 1; 
    else    
       return n + JumlahInt(n‐1); 

2008 | Direktorat Pembinaan SMK 367


 
Bahasa Pemrograman Rekursif


 
int main(int argc, char *argv[]) 

    int n; 
    cout<<"Program Jumlah Integer\n"; 
    cout<<"Masukkan Nilai n = "; 
    cin>>n; 
    cout<<"Jumlah bilangan Integer dari 1 sampai "<<n<<" = "<<JumlahInt(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program tersebut dapat dilihat dalam gambar berikut ini:


Program Jumlah Integer 
Masukan Nilai n = 4 
Jumlah bilangan Integer dari 1 sampai 4 = 10 

10.7. Penerapan Algoritma Iteratif


Dibawah ini merupakan program dibawah ini harapanya
beberapa contoh program iteratif menjadi tahu mengenai perbedaan
dengan berbagai kasus dilapangan antara keduanya. Untuk lebih
seperti faktorial, program jelasnya perhatikan program-program
pemangkatan dan lain sebagainya. dibawah ini:
Setelah memperhatikan contoh

Program 10.6. Faktorial:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int Faktorial(int n) 

    int x = 1; 
    for(int i = 1; i <= n; i++) 
       x = x * i; 
    return x; 

 
int main(int argc, char *argv[]) 

368 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

    int n; 
    cout<<"Program Faktorial Iteratif\n"; 
    cout<<"Masukkan Nilai n : "; 
    cin>>n; 
    cout<<"Faktorial("<<n<<") = "<<Faktorial(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program sebagai berikut:


Program Faktorial Iteratif 
Masukan Nilai n : 3 
Faktorial (3) = 6 

Program 10.7. Pangkat secara Iteratif:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
float Pangkat(float a, int n) 

      float hasil = 1; 
      if (n==0) 
         return 1; 
      for (int i=1; i<=n; i++) 
      { 
          hasil = hasil * a;     
      } 
      return hasil; 

 
int main(int argc, char *argv[]) 

    float a; 
    int n; 
    cout<<"Program Pangkat Iteratif\n"; 
    cout<<"Isilah Nilai a = "; 
    cin>>a; 
    cout<<"Isilah Nilai n = "; 
    cin>>n; 
    cout<<"Hasil dari "<<a<<" pangkat "<<n<<" adalah "<<Pangkat(a,n)<<"\n"; 
    system("PAUSE"); 

2008 | Direktorat Pembinaan SMK 369


 
Bahasa Pemrograman Rekursif

    return EXIT_SUCCESS; 

Keluaran program diatas adalah sebgai berikut:


Program Pangkat Iteratif 
Istilah Nilai a = 2 
Istilah Nilai n = 5 
Hasil dari 2 pangkat 5 adalah 32 

Program 10.8. Menghitung Jumlah Integer Positif secara iteratif:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int JumlahInt(int n) 

    int hasil = 0; 
    for (int i=1; i<=n; i++) 
    { 
        hasil = hasil + i;     
    } 
    return hasil; 

 
int main(int argc, char *argv[]) 

    int n; 
    cout<<"Program Jumlah Integer Iteratif\n"; 
    cout<<"Masukkan Nilai n = "; 
    cin>>n; 
    cout<<"Jumlah bilangan Integer dari 1 sampai "<<n<<" = "<<JumlahInt(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program adalah sebagai berikut:


Program Jumlah Integer Iteratif 
Masukan Nilai n = 5 
Jumlah bilangan Integer dari 1 sampai 5 = 15 

Dari berbagai contoh aplikasi di ciri algoritma program baik secara


atas kiranya cukup jelas nampak ciri- Teknik Rekursif maupun Teknik

370 Direktorat Pembinaan SMK | 2008

 
Rekursif Bahasa Pemrorgraman

Iteratif. Apakah semua problem bisa Integer Positif bisa juga diselesaikan
dipecahkan secara Teknik Rekursif ? dengan rumus : n x (n + 1) / 2 atau
Ternyata tidak semuanya. Apakah (n2 + n) / 2 jadi tidak perlu Iteratif.
juga harus diselesaikan secara Perhatikan beberapa kasus
Teknik Iteratif ? Ternyata juga tidak. berikut ini pun dapat diselesaikan
Sebagai contoh Jumlah Bilangan dengan rekursif:

1. Menggambar karakter ’*’ sebanyak n


  *********** 
     n=11 
 
Basic   : n=0   
 tidak mencetak apa‐apa 
Rekursif  : n>0   
 gambar karakter ’*’ sebanyak (n‐1)  
 cetak ’*’ 

2. Menggambar persegi panjang dengan lebar l dan tinggi t


 
 
                                       t = 4 
 
 
           l = 11 
 
Basic   : n=0   
 tidak mencetak apa‐apa 
Rekursif  : n>0   
 gambar persegi panjang dengan lebar l dan tinggi (t‐1) 
 gambar ’*” sebanyak l 

3. Menggambar segitiga/piramid dengan tinggi n mulai kolom k


     
 
 
      t = 4 
 
 
 
                     k=0 
      
Basic   : n=0   
2008 | Direktorat Pembinaan SMK 371
 
Bahasa Pemrograman Rekursif

 tidak mencetak apa‐apa 
Rekursif  : n>0   
 gambar piramid dengan tinggi (n‐1) mulai kolom (k+1) 
 cetak karakter ’ ’ sebanyak k 
 cetak karakter ’*’ sebanyak 2n – 1 

10.8. Latihan Soal


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan rekursif, jelaskan
2. Apakan perbedaan antara program menggunakan rekursif dan interatif
3. Dari soal diatas jelaskan kekurangan dan kelebihan kedua program
tersebut
4. Buatlah program faktorial dengan rekursif
5. Buatlah program pemangkatan dengan menggunakan rekursif

372 Direktorat Pembinaan SMK | 2008

Anda mungkin juga menyukai