Al-Khuwarizmi
dibaca orang barat menjadi Algorism. Al-Khuwarizmi menulis buku yang berjudul
Kitab Al Jabar Wal-Muqabala yang artinya “Buku pemugaran dan
pengurangan” (The book of restoration and reduction). Dari judul buku
itu kita juga memperoleh akar kata “Aljabar” (Algebra). Perubahan kata
dari Algorism menjadi Algorithm muncul karena kata Algorism sering
dikelirukan dengan Arithmetic, sehingga akhiran –sm berubah
menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal
yang biasa. Maka lambat laun kata Algorithm berangsur-angsur dipakai
sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna
kata aslinya. Dalam Bahasa Indonesia, kata Algorithm diserap menjadi Algoritma.
“Algoritma adalah urutan langkah-langkah logis
penyelesaian masalah yang disusun secara sistematis dan logis”. Kata Logis merupakan
kata kunci dalam Algoritma. Langkah-langkah dalam Algoritma harus logis dan
harus dapat ditentukan bernilai salah atau benar. Dalam pembelajaran Algoritma Pemrograman pada matakuliah
Desain Analisis Algoritma, terdapat materi yang membahas Rekursif dan Iteratif.
REKURSIF
|
ITERATIF
|
Perulangan rekursif merupakan salah satu
metode didalam pemrograman yang mana dalam sebuah fungsi terdapat intruksi
yang memanggil fungsi itu sendri, atau lebih sering disebut memanggil dirinya
sendiri.
Jadi metode rekursif, melakukan siklus tanpa
menggunakan sintax perulangan seperti, (for, while do, repeat untill, dan
sejenisnya).
Untuk mengenal suatu program yang mengandung
nilai rekursf atau tidak, hanya melihat dari kondisi paramater. Jika program
utama tidak memiliki parameter, tidak mungkin bersifat rekursif. Selain itu
prosedur dan fungsi juga bisa bersifat rekursif. Contoh kasus yang biasa
menggunakan rekursif adalah faktorial.
Prosedur rekursif memerlukan cara
pendefenisian yang disebut Initial State dan Final State. Initial state
merupakan suatu kondisi awal dari suatu masalah yang akan dipecahkan.
Sedangkan Final state merupakan kondisi akhir dari suatu permasalahan
yang telah terpecahkan.
|
Perulangan iteratif merupakan
perulangan yang melakukan proses perulangan terhadap sekelompok intruksi.
Perulangan dilakukan dalam batasan syarat tertentu. Ketika syarat tersebut
tidak terpenuhi lagi maka perulangan aka terhenti.
Bisa
dikatakan juga sebagai sebuah proses yang melakukan perhitungan dengan hasil
yang diingin menggunakan cara siklus berulang melalui sebuah operasi
perulangan.
Berdasarkan pandangan ilmu pemrograman
komputer, iteratif menggambarkan situasi dimana urutan instruksi dapat
dieksekusi berulang kali. Dalam sekali eksekusi biasa disebut juga 1 iterasi.
Dan jika iterasi dilakukan berulang kali, proses tersebut biasa dikenal sebagai
loop. Sehinga proses iterasi terjadi karena adanya loop.
Dalam software development proses iteratif
menggambarkan proses pengembangan dan perencanaan heuristik dalam
pengembangan sebuah aplikasi. Dalam setiap iterasi akan ditinjau oleh tim
software development untuk validasi sebelum digunakan oleh end-user.
|
Kelebihan
perulangan 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
|
Kelebihan
perulangan iteratif
1.
Mudah dipahami dan mudah dilakukan debuging
ketika ada perulangan yang salah
2.
Dapat melakukan nested loop atau yang disebut
dengan looping bersarang
3.
Proses lebih singkat karena perulangan
terjadi pada kondisi yang telah disesuaikan
4.
Jarang terjadi overflow karena batasan dan
syarat perulangan yang jelas
|
Kekurangan
perulangan rekursif
1.
Tidak bisa melakukan nested loop atau looping
bersarang
2.
Biasanya membuat fungsi sulit untuk dipahami,
hanya cocok untuk persoalan tertentu saja
3.
Memerlukan stack yang lebih besar, sebab
setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan
ditempatkan ke stack dan ada kalaya akan menyebabkan stack tak cukup lagi
(Stack Overum)
4.
Proses agak berbelit-belit karena terdapat
pemangilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk
|
Kekurangan perulangan
iterative
1.
Tidak dapat menggunakan batasan berupa fungsi
2.
Perulangan dengan batasan yang luas akan
menyulitkan dalam pembuatan program perulangan itu sendiri
|
Contoh :
int pangkat_r(int x, int n) { if(n == 0) { return 1; }else{ return x * pangkat_r(x, n-1); } } |
Contoh :
int pangkat_i(int x, int n){
int temp =1;
for(int i=1;i<=n;i++)
{
temp *=x;
}
return temp;
}
|
Persamaan
- Sama-sama merupakan bentuk perulangan.
- Dilakukan pengecekan kondisi terlebih dahulu sebelum mengulang.
Perbedaan
- Iteratif menggunakan FOR, WHILE, DO-WHILE sedangkan rekursif hanya menggunakan IF.
- Iteratif dapat berjalan pada program yang terdiri dari prosedur (Tidak terdapat fungsi) sedangkan rekursif merupakan fungsi.
Contoh Program Perpangkatan menggunakan Rekursif dan Iteratif
#include <stdio.h>
#include <iostream>
int a,b, hasil;
int pangkat_r(int x, int n){
if(n == 0)
{ return 1;
}else{
return
x * pangkat_r(x, n-1);
}
}
int pangkat_i(int x, int n){
int temp =1;
for(int
i=1;i<=n;i++)
{
temp
*=x;
}
return temp;
}
void proses()
{
system("cls");
printf("\n\n");
printf("\t\t\t Masukkan Nilai positif yang akan
dipangkatkan : "); scanf("%d",&a);
printf("\t\t\t Masukkan Banyaknya Pangkat : ");
scanf("%d",&b);
}
void ulang()
{
system("cls");
printf("\n\n");
printf("\t\t\t***********************************************************\n");
printf("\t\t\t*\t\t\t\t\t\t\t *\n");
printf("\t\t\t*
Perpangkatan dari %d^%d",a,b);
printf("\t\t\t\t\t *\n");
printf("\t\t\t*\t\t\t\t\t\t\t *\n");
printf("\t\t\t*
Metode Rekursif");
printf("\t\t\t\t\t *\n");
printf("\t\t\t
+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
hasil =
pangkat_r(a,b);
printf("\t\t\t +
Hasil Perpangkatan diatas adalah = %d", hasil);
printf("\t\t+\n");
printf("\t\t\t
+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
hasil = 0;
printf("\n\n\n\t\t\t Metode Iteratif\n");
printf("\t\t\t
+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
hasil =
pangkat_i(a,b);
printf("\t\t\t + Hasil Perpangkatan diatas adalah = %d",
hasil);
printf("\t\t+\n");
printf("\t\t\t
+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("\n\n\n\n");
}
main ()
{
char p;
do{
proses();
do{
ulang();
printf("\t\t\t Apakah Anda Ingin Mencoba Lagi ? (Y/N) :
");scanf("%s",&p);
if((p !=
'Y' && p != 'y')&&(p != 'N' && p != 'n'))
{
printf("\t\t\t Masukkan dengan benar !!!! \n");
printf("\t\t\t ");
system("pause");
}
}while((p != 'Y'
&& p != 'y')&&(p != 'N' && p != 'n'));
}while(p == 'Y' || p
== 'y');
// system("pause");
return 0;
}
|
Contoh Faktorial menggunakan rekursif
#include <iostream>
using namespace std;
long rekursiffaktorial(int f)
{
if (f == 0)
return 1;
else
return f * rekursiffaktorial(f - 1);
}
main()
{
int x;
int n = 5;
cout << n <<
"! = "
<<
rekursiffaktorial(n) << endl;
n = 9;
cout << n <<
"! = "
<<
rekursiffaktorial(n) << endl;
cout<<"Masukan
Angka yang akan difaktorialkan : ";
cin>>x;
cout << x
<<"! = " << rekursiffaktorial(x) <<endl;
// return 0;
}
|
Contoh Faktorial menggunakan Iteratif
#include <iostream>
using namespace std;
int factorial(int);
int main()
{
int i;
cout<<"masukkan
bilangan bulat positif: ";
cin>>i;
if (i<0)
cout<<"bukan
bilangan bulat";
else
cout<<i<<"! = "<<factorial(i)<<endl;
system ("pause");
return 0;
}
int factorial(int i) // fungsi faktorial iteratif
{
int result=1;
for (int n=1; n<=i; n++)
{
result *= n;
}
return result;
}
|
Tidak ada komentar:
Posting Komentar