String & Rekursif : Perbedaan Metode Perulangan Rekursif & Iteratif, Kelebihan & Kelemahan Keduanya, Base Case & Rekurif Case

7 12 2009

3. Berikan persamaan dan perbedaan antara keduanya! Berikan juga masing –masing kelebihan dan kelemahan!

  • Persamaan antara rekursi dengan iteratif adalah keduanya sama – sama digunakan untuk mengulangi suatu kode atau kumpulan kode pada pembuatan program.
  • Kelebihan dan kelemahan masing-masing jenis perulangan tersebut adalah :
Metode Perulangan Kelebihan Kekurangan
Rekursi
  • Dapat mempermudah solusi karena kemampuan memanggil dirinya sendiri
  • Memungkinkan terjadinya overflow pada stack (stack tak lagi mampu menangani permintaan pemanggilan subrutin karena kehabisan memori)
  • Untuk menyelesaikan masalah butuh waktu dan jarak karena butuh fungsi panggilan tambahan
Iteratif
  • Waktu yang digunakan menyelesaikan masalah lebih singkat karena memory yang digunakan lebih sedikit.
  • Tidak dapat memanggil dirinya sendiri.

4. Dalam metode rekursif dikenal istilah base case dan recursive case… Apa artinya ? Dalam potongan program berikut, mana yang disebut base case, dan mana yang disebut recursive case ?

Apa output dari potongan program di atas jika diberikan input bilangan1 = 7 dan bilangan2 = 6? Kemudian ubahlah metode rekursi dari potongan program tersebut menjadi metode iterative!

  • Base case adalah Suatu keadaan pada fungsi rekursif dimana langkah penyelesaiannya sudah diketahui sehingga menghentikan proses rekursi tersebut.
  • Recursive Case adalah Suatu keadaan pada fungsi rekursif yang penyelesaiannya membutuhkan pemanggilan dirinya sendiri hingga keadaan dalam base casenya terpenuhi.
  • Pada potongan program :

Int perkalian(int bilangan1, int bilangan2)

{

if(bilangan2==1)return bilangan1;

else return bilangan1+perkalian(bilangan1,bilangan2-1);

}

Yang merupakan base case adalah :

if(bilangan2==1)return bilangan1;

Yang merupakan recursive case adalah :

else return bilangan1+perkalian(bilangan1,bilangan2-1);
  • Jika potongan program tersebut disusun secara utuh menjadi :

Algoritma Program :

  1. Program menampilkan statemen ”Menghitung perkalian dari 2 bilangan”.
  2. Program menampilkan instruksi kepada user untuk memasukkan input sebanyak 2 kali.
  3. Program memanggil fungsi perkalian.
  4. Fungsi perkalian menghitung hasil perkalian 2 input tersebut. Jika bilangan kedua sama dengan  1, fungsi perkalian akan mengembalikan nilai bilangan pertama ke fungsi main. Jika tidak fungsi perkalian akan melakukan rekursi dengan menjumlahkan bilangan pertama dengan hasil fungsi perkalian selanjutnya dimana bilangan kedua dikurangi 1 tiap kali rekursi.
  5. Fungsi perkalian mengembalikan nilai ke fungsi main.
  6. Program menampilkan output kepada user.

Source Code Program :

#include<stdio.h>

#include<conio.h>

int perkalian(int, int);

void main()

{

int bil1, bil2;

puts("Menghitung perkalian dari 2 bilangan");

printf("Masukkan bilangan pertama: ");

scanf("%d", &bil1);

printf("Masukkan bilangan kedua: ");

scanf("%d", &bil2);

printf("Hasil perkalian antara %d dengan %d adalah: %d\n", bil1, bil2, perkalian(bil1, bil2));

getch();

}

int perkalian(int bilangan1, int bilangan2)

{

if(bilangan2==1)return bilangan1;

else return bilangan1+perkalian(bilangan1,bilangan2-1);

}
  • Program perulangan dengan metode iteratif :

Algoritma Program :

  1. Program menampilkan statemen ”Menghitung perkalian dari 2 bilangan”.
  2. Program menampilkan instruksi kepada user untuk memasukkan input sebanyak 2 kali.
  3. Program memanggil fungsi perkalian.
  4. Fungsi perkalian menghitung hasil perkalian 2 input tersebut dengan menjumlahkan bilangan pertama dengan dirinya sendiri sebanyak bilangan kedua secara looping(iteratif).
  5. Fungsi perkalian mengembalikan nilai ke fungsi main.
  6. Program menampilkan output kepada user.

Source Code Program :

#include<stdio.h>

#include<conio.h>

int perkalian(int, int);

void main()

{

int bil1, bil2;

puts("Menghitung perkalian dari 2 bilangan");

printf("Masukkan bilangan pertama: ");

scanf("%d", &bil1);

printf("Masukkan bilangan kedua: ");

scanf("%d", &bil2);

printf("Hasil perkalian antara %d dengan %d adalah: %d\n", bil1, bil2, perkalian(bil1, bil2));

getch();

}

int perkalian(int bilangan1, int bilangan2)

{

int i, hasil=0;

for(i=1; i<=bilangan2; i++)

hasil+=bilangan1;

return hasil;

}

Posted By : Evan Yofiyanto @ Evan’s Blog : Kuliah Informatika (kuliahinformatika.wordpress.com)

[FREAX]


Actions

Information

5 responses

5 03 2011
link « Udinfensdin's Blog

[…] ni ada beberapa link untuk belajar pemrograman Comments RSS feed LikeBe the first to like this […]

9 03 2011
budiono

Contoh konversi :

#include

class Awal {
public :
void masukan();
void proses();
void keluaran();
private:
int a;
int hasil;
};

void Awal::masukan() {
cout <> a;
}

void Awal::proses() {
hasil = 3 + a;
}
void Awal::keluaran() {
cout << "Hasil keluaran dari proses : " << hasil;
}

int main(int argc, char *argv[])
{
Awal X;
X.masukan();
X.proses();
X.keluaran();
system("PAUSE");
return EXIT_SUCCESS;
}

12 03 2011
budiono

#include

class Urai
{
friend istream & operator >> ( istream &, Urai & );
friend ostream & operator <> ( istream & masukan, Urai & angka )
{
cout <> angka.bilangan;
return masukan;
}

ostream & operator << ( ostream & keluaran, const Urai & angka )
{
keluaran << angka.ratusan << " ratusan, " << angka.puluhan << "
puluhan, " << angka.satuan <> X;
X.uraikan();
cout << X;
}

12 03 2011
budiono

#include

class Urai
{
friend istream & operator >> ( istream &, Urai & );
friend ostream & operator <> ( istream & masukan, Urai & angka )
{
cout <> angka.bilangan;
return masukan;
}

ostream & operator << ( ostream & keluaran, const Urai & angka )
{
keluaran << angka.ratusan << " ratusan, " << angka.puluhan << "
puluhan, " << angka.satuan <> X;
X.uraikan();
cout << X;
}

#include
#include

class Konversi {
friend ostream& operator<>(istream&, Konversi&);
public:
Konversi();
void konversi_ke_cm(){ cm = (m * 100); }
void konversi_ke_inci(){ inci = cm/2.54; }
private:
float m;
float cm, inci;
};

Konversi::Konversi() {
cout << "Program konversi m ke cm dan inci\n";
cout <>(istream& in, Konversi& masukan) {
cout <> masukan.m;
masukan.konversi_ke_cm();
masukan.konversi_ke_inci();
return in;
}

ostream& operator<<(ostream& out, const Konversi& keluaran) {
out << "Nilai m : " << keluaran.m << endl;
out << keluaran.m << " m = " << keluaran.cm << " cm " << endl;
out << keluaran.m << " m = " << keluaran.inci << " inci " <> X;
cout << X;
getch();
return 0;
}

#include
#include

class Aljabar {
friend ostream& operator<>(istream&, Aljabar&);
public:
Aljabar();
void hitung(){
q = m / n; // mendapatkan nilai q
r = m % n; // mendapatkan nilai r
}
private:
int m,n; // input
int q,r; // output
};

Aljabar::Aljabar() {
cout << "Membaca input nilai n dan m dengan ketentuan n<m\n";
cout <>(istream& in, Aljabar& masukan) {
cout <> masukan.m;
cout <> masukan.n;
masukan.hitung();
return in;
}

ostream& operator<<(ostream& out, const Aljabar& keluaran) {
out << "Nilai q adalah = " << keluaran.q << endl;
out << "Nilai r adalah = " << keluaran.r << endl << endl;
out << "Jadi, " << keluaran.m << " = " << keluaran.q << " x ";
out << keluaran.n << " + " <> X;
cout << X;
getch();
return 0;
}
#include
#include

class Perkalian {
friend ostream& operator<>(istream&, Perkalian&);
public:
Perkalian();
void hitung_perkaliannya(){ hasil = (a * b); }
private:
int a,b;
int hasil;
};

Perkalian::Perkalian() {
cout << "Program mengalikan 2 integer\n";
cout <>(istream& in, Perkalian& masukan) {
cout <> masukan.a;
cout <> masukan.b;
return in;
}

ostream& operator<<(ostream& out, const Perkalian& keluaran) {
out << "Nilai a : " << keluaran.a << endl;
out << "Nilai b : " << keluaran.b << endl;
out << "Hasil kali integer di atas : " << keluaran.hasil <> X;
X.hitung_perkaliannya();
cout << X;
getch();
return 0;
}

#include
#include

class Hitung {
friend ostream& operator<>(istream&, Hitung&);
public:
Hitung();
void hitung_jumlahnya(){ jumlah = (a + b + c); }
private:
int a,b,c;
int jumlah;
};

Hitung::Hitung() {
cout << "Program menghitung jumlah 3 integer\n";
cout <>(istream& in, Hitung& masukan) {
cout <> masukan.a;
cout <> masukan.b;
cout <> masukan.c;
return in;
}

ostream& operator<<(ostream& out, const Hitung& keluaran) {
out << "Nilai a : " << keluaran.a << endl;
out << "Nilai b : " << keluaran.b << endl;
out << "Nilai c : " << keluaran.c << endl;
out << "Jumlah 3 integer di atas : " << keluaran.jumlah <> X;
X.hitung_jumlahnya();
cout << X;
getch();
return 0;
}

30 12 2012
Desy D Hapsary

thanks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: