Rekursi - Portal Garuda

advertisement
Rekursi
Ema Utami
STMIK AMIKOM Yogyakarta
Mendefinisikan Barisan Bilangan dengan Rekursi
Jika kita mempunyai sebuah barisan bilangan, maka barisan bilangan tersebut dapat dinyatakan
dalam beberapa cara.
1. Menuliskan beberapa suku pertama dari barisan tersebut dengan harapan bahwa pembaca dapat
mengerti kelanjutan suku-suku dari barisan tersebut.
2. Menyatakan suatu barisan bilangan dengan rumus.
Misalnya kita mempunyai sebuah barisan bilangan aritmatika dimana suku pertama dari barisan
bilangan tersebut adalah 3 dan beda antar dua suku yang berdekatan adalah 2 maka kita dapat
menyatakan barisan bilangan tersebut dengan rumus.
3. Menyatakan barisan bilangan tersebut secara rekursi.
Barisan bilangan yang didefinisikan secara rekursi harus ditentukan dulu suku pertama ataupun
kondisi awal dari barisan tersebut dan suku-suku selanjutnya dalam hubungannya dengan suku
yang sudah dinyatakan sebelumnya.
Kesimpulan di atas adalah bahwa kita dapat mendefinisikan suatu barisan bilangan dengan
menggunakan rekursi. Apa pengertian rekursi itu sendiri?
Rekursi adalah proses yang bisa memanggil dirinya sendiri. Bentuk rekursi merupakan
alternatif dari bentuk iterasi atau perulangan. Ada beberapa masalah yang lebih cocok dipecahkan
dengan bentuk rekursi. Tetapi secara umum bentuk rekursi biasanya kurang efisien dibandingkan
bentuk iterasi karena rekursi memanggil dirinya sendiri sehingga menyebabkan waktu pemrosesan
yang lebih besar dibandingkan bentuk iterasi biasa. Proses rekursi akan menggunakan memory
stack, semakin lama proses rekursi dikerjakan maka memory stack akan terus berkurang yang
berakibat memory stack habis.
Dalam rekursi sebenarnya terkandung pengertian fungsi, perbedaannya adalah:
1. Rekursi bisa memanggil dirinya sendiri.
2. Fungsi harus dipanggil lewat pemanggil fungsi (function call).
Suatu fungsi tidak hanya bisa memanggil fungsi lain, melainkan juga bisa memanggil
dirinya sendiri. Pemanggilan kepada dirinya sendiri bisa berarti proses berulang yang tidak bisa
diketahui kapan berakhir sehingga dalam rekursi harus ada syarat-syarat berikut:
1.
Ada titik pemberhentian (stopping state) sebagai pengendali rekursi.
2. Adanya langkah induksi yang menuju pada titik pemberhentian.
Contoh Kasus Perkalian Dua Buah Bilangan Bulat Positif
a. Algoritma dengan pseudocode:
function Kali (m,n)
Hasil=0
for i=1 to n do
Hasil=Kali+m
endfor
Kali=Hasil
endfunction
b. Implementasi dalam Bahasa C/C++
/*Program Menghitung Perkalian Dua Bilangan Bulat*/
#include<stdio.h>
#include<conio.h>
int kali(int x,int y);
main()
{
int a,b,result;
printf("Program menghitung Perkalian Dua Bilangan Bulat \n");
printf("Masukkan bilangan Pertama :");
scanf("%d",&a);
printf("Masukkan bilangan kedua :");
scanf("%d",&b);
result=kali(a,b);
printf("Hasil Perkalian %d x %d = %d \n",a,b,result);
getch();
}
int kali(int x,int y)
{
int hasil,i;
if(x==1)
return y;
else
{
hasil=y;
for(i=1;i<x;i++)
hasil=hasil+y;
return(hasil);
}
}
Tampilan Program:
Program menghitung Perkalian Dua Bilangan Bulat
Masukkan bilangan Pertama : 4
Masukkan bilangan kedua : 5
Hasil Perkalian 4 x 5 = 20
Pada program tersebut kita membuat sebuah fungsi dengan type data long int. Kita tidak
menggunakan type data int karena type data int hanya mempunyai range data yang brkisara antara –
32.768 sampai dengan 32.767 . Hal ini dilakukan untuk mengantisipasi jika program yang kita buat
digunakan untuk menghitung perkalian dua bilangan bulat yang dimungkinkan hasilnya melebihi
32.767 sedangkan type data long int range datanya berkisar antara –2.147.483.648 sampai dengan
2.147.483.647.
Daftar Pustaka
Ema Utami, Suwanto Raharjo, 2004, Belajar C Di GNU/Linux, ISSN 979-3289-55-4, Penerbit
Graha Ilmu Yogyakarta
Ema Utami, Suwanto Raharjo, 2004, Struktur Data Menggunakan C di GNU/Linux, ISSN 979-731395-6, Penerbit Andi Offset Yogyakarta
Ema Utami, 2004, Logika, Algoritma dan Implementasinya dalam Bahasa Python di GNU/Linux,
ISSN 979-731-443-X, Penerbit Andi Offset Yogyakarta
Ema Utami, Sukrisno, 2005, 10 Langkah Mudah Memahami Logika Algoritma Menggunakan
Bahasa C/C++ di GNU/Linux, ISSN 979-763-020-X, Penerbit Andi Offset Yogyakarta
Ema Utami, Sukrisno, 2005, 101 Tips dan Trik Bahasa C untuk Pemula di GNU/Linux, ISSN 979763-010-2, Penerbit Andi Offset Yogyakarta
Ema Utami, Sukrisno, Suwanto Raharjo, 2007, Struktur Data : Konsep dan Implementasinya dalam
Bahasa C dan Free Pascal di GNU/Linux, ISSN 979-756-292-2, Penerbit Graha Ilmu
Yogyakarta
Download