ALGORITMA | REKURSIF DAN ITERATIF - MOHAMMAD RISKIYANTO

Maret 26, 2019

ALGORITMA | REKURSIF DAN ITERATIF


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