A. REKURSIF
1.Pengertian Rekursif
Rekursif dapat diartikan bahwa suatu proses yang bisa memanggil dirinya
sendiri. sedikit menyimpang dari pengertian ada sedikit pendapat tentang Rekursif
salah satunya adalah Menurut definisi dalam Microsoft Bookshelf,
Rekursif adalah kemampuan suatu rutin untuk memanggil dirinya sendiri. Dalam
Rekursif sebenarnya terkandung pengertian prosedur dan fungsi. Perbedaannya
adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur dan
fungsi harus dipanggil lewat pemanggil prosedur dan fungsi. Rekursif merupakan
teknik pemrograman yang penting dan beberapa bahasa pemrograman mendukung
keberadaan proses rekursif ini. Dalam prosedur dan fungsi, pemanggilan ke
dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan
akan berakhir.
Contoh paling sederhana dari proses rekursif ini adalah proses menghitung nilai
factorial dari suatu bilangan bulat positif dan mencari deret Fibbonacci dari
suatu bilangan bulat.
- Nilai factorial secara rekursif dapat ditulis sebagai
0
! = 1
N
! = N x (N-1) !
yang secara pemrograman dapat
ditulis sebagai
Faktorial(0) =
1
(1)
Faktorial(N) =
N*Faktorial(N-1)
(2)
Persamaan (2) di atas adalah contoh
hubungan rekurens (recurrence relation), yang berarti bahwa nilai suatu
fungsi dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan
argumen yang lebih kecil. Persamaan (1) tidak bersifat rekursif, disebut nilai
awal atau basis. Setiap fungsi rekursif paling sedikit mempunyai satu
nilai awal, jika tidak fungsi tersebut tidak bisa dihitung secara eksplisit.
- Bilangan Fibbonacci didefinisikan sebagai berikut
1 1 2 3
5 8 13 21
34 55 89 …
dari barisan tersebut dapat dilihat
bahwa bilangan ke-N (N>2) dalam barisan dapat dicari dari dua bilangan
sebelumnya yang terdekat dengan bilangan N, yaitu bilangan ke-(N-1) dan
bilangan ke-(N-2), sehingga dapat dirumuskan sebagai
Fibbonacci(1)
=
1
(1)
Fibbonacci(2)
=
1
(2)
Fibbonacci(N)
= Fibbonacci(N-1) +
Fibbonacci(N-2)
(3)
Dengan persamaan (1) dan (2) adalah basis dan persamaan (3) adalah rekurensnya.
Rekursif Versus Iteratif
Dalam beberapa situasi, pemecahan secara rekursif maupun secara iteratif
mempunyai keuntungan dan kekurangan yang bisa saling diperbandingkan. Adalah
cukup sulit untuk menentukan mana yang paling sederhana, paling jelas, paling
efisien dan paling mudah disbanding yang lain. Boleh dikatakan pemilihan cara
iterative maupun rekursif merupakan kesenangan seorang programmer dan
tergantung konteks permasalahan yang akan dipecahkan sesuai dengan kesanggupan
yang bersangkutan.
Perhatikanlah contoh berikut :
#Contoh
1.
function FACT(N : integer) ® integer
{mengirimkan bilangan factorial
dengan cara rekursif}
Deklarasi
Deskripsi
if
(N=0) then
return
1
{Basis}
else
return(N*FACT(N-1)) {Rekurens}
endif
#Contoh
2.
function FIBO(N : integer) ® integer
{mengirimkan bilangan fibbonacci
dengan cara rekursif}
Deklarasi
Deskripsi
if ((N=1)
or (N=2)) then
return
1
{Basis}
else
return(FIBO(N-1)+ FIBO(N-2)) {Rekurens}
endif
#Contoh
3.
function FACT(N : integer) ® integer
{mengirimkan bilangan factorial
dengan cara iteratif}
Deklarasi
x,i : integer
Deskripsi
x ¬ 1
for i = 1 to N do
x ¬ i*x
endfor
return x
#Contoh
4.
function FIBO(N : integer) ® integer
{mengirimkan bilangan fibbonacci
dengan cara iteratif}
Deklarasi
Fibbonacci, Akhir, Bantu, i : integer
Deskripsi
If
N=0 then
return 0
else
i¬1
Fibbonacci ¬1
Akhir ¬0
while (i¹N)do
Bantu ¬ Fibbonacci
i ¬ i + 1
Fibbonacci ¬ Fibbonacci + Akhir
Akhir ¬ Bantu
Endwhile
return Fibbonacci
endif
struktur data – cetak karakter
rekursif dengan C
#include
<stdio.h>
void
main()
{
int h,i,j;
char c;
printf("masukkan
karakter yang ingin di cetak: ");
scanf("%s",&c);
printf("masukkan berapa kali karakter di cetak: ");
scanf("%i",&h);
for(i=h;i>=0;i--)
{
for(j=0;j<=i;j++)
{
printf("%c",c);
}
printf("\n");
}
}
2.Fungsi rekursif
Pada pembahasan-pembahasan sebelumnya, telah dibahas tentang fungsi. Tapi pada
saat saya presentasi ada sebuah pertanyaan “Apa saja manfaat menggunakan Fungsi
Rekursi?”. Karena saya hanya tahu manfaat fungsi tapi bukan fungsi rekursif
saya mencoba menjawabnya. dan jawaban saya adalah “Karena fungsi rekursi ini
mirip dengan perulangan, jadi kelebihan/manfaatnya yaitu pada penghematan
penulisan listing program jika dibandingkan dengan looping/perulangan”.
Tapi
setelah cari-cari akhirnya saya mendapatkan manfaat fungsi rekursif serta
perbandingannya
dengan looping/perulangan:
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.
|
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.
|
Kelebihan
perulangan rekursif
|
#
Kelebihan perulangan iteratif
|
Kekurangan
perulangan rekursif
|
Kelemahan
perulangan iterative
|
Perbedaan dan Persamaan Rekursif dan
Iteratif :
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.
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.
1.Pengertian iteratif
Perulangan iteratif merupakan perulangan yang melakukan proses perulangan terhadap sekelompok instruksi di mana perulangan tersebut akan berhenti jika batasan syarat sudah tidak terpenuhi.
Kelebihan perulangan iteratif:
• Mudah dipahami dan mudah melakukan debugging ketika ada perulangan yang salah.
• Dapat melakukan nested loop atau yang disebut dengan looping bersarang.
• Proses lebih singkat karena perulangan terjadi pada kondisi yang telah disesuaikan.
• Jarang terjadi overflow karena batasan dan syarat perulangan yang jelas.
Kelemahan perulangan iteratif:
• Tidak dapat menggunakan batasan berupa fungsi.
• Perulangan dengan batasan yang luas akan menyulitkan dalam pembuatan program perulangan itu sendiri.
2. Program 1
Bentuk fungsi iteratif :
#include <cstdlib>
#include <iostream>
using namespace std;
int jumlah(int n) {
int hasil = 0;
for (int i=0; i<n; i=i+2)
hasil = hasil + i;
return hasil;
}
void cetak(int n) {
for (int i=0; i<n; i=i+2)
cout << i << ” “;
}
int main(int argc, char *argv[])
{
int n = 10;
cout << jumlah(n);
cetak(n);
Perulangan iteratif merupakan perulangan yang melakukan proses perulangan terhadap sekelompok instruksi di mana perulangan tersebut akan berhenti jika batasan syarat sudah tidak terpenuhi.
Kelebihan perulangan iteratif:
• Mudah dipahami dan mudah melakukan debugging ketika ada perulangan yang salah.
• Dapat melakukan nested loop atau yang disebut dengan looping bersarang.
• Proses lebih singkat karena perulangan terjadi pada kondisi yang telah disesuaikan.
• Jarang terjadi overflow karena batasan dan syarat perulangan yang jelas.
Kelemahan perulangan iteratif:
• Tidak dapat menggunakan batasan berupa fungsi.
• Perulangan dengan batasan yang luas akan menyulitkan dalam pembuatan program perulangan itu sendiri.
2. Program 1
Bentuk fungsi iteratif :
#include <cstdlib>
#include <iostream>
using namespace std;
int jumlah(int n) {
int hasil = 0;
for (int i=0; i<n; i=i+2)
hasil = hasil + i;
return hasil;
}
void cetak(int n) {
for (int i=0; i<n; i=i+2)
cout << i << ” “;
}
int main(int argc, char *argv[])
{
int n = 10;
cout << jumlah(n);
cetak(n);
system(“PAUSE”);
return EXIT_SUCCESS;
return EXIT_SUCCESS;
SUB PROGRAM
(REKURSIF DAN ITERATIF)
PERBEDAAN REKURSIF DAN ITERATIF
Pada pertemuan lalu, telah disinggung sedikit mengenai pengertian dan contoh penggunaan fungsi rekursif. Fungsi Rekursif merupakan proses perulangan dengan cara memanggil dirinya sendiri. Sedangkan fungsi iteratif adalah proses perulangan dengan menggunakan fungsi for, while dan repeat-until (do-while). Berikut contoh penggunaan fungsi rekursif dan iteratif :
Menghitung nilai faktorial dari sebuah bilangann faktorial didefinisikan secara rekursif sebagai berikut
n! = 1 untuk n=0 dan n=1
= n*(n-1)! , n>2Algoritma
Rekursif Iteratif
Fungsi faktorial(input n:integer):integer
Deskripsi
if (n=0) or (n=1) then
1ßfaktorial
else
n*faktorial(n-1)ßfaktorial Fungsi faktorial(input n:integer):integer
Deskripsi
if (n=0) or (n=1) then
1ßfaktorial
else
i:integer
begin
for i=1 to n do
hasil=hasil*i
end
hasilßfaktorialTranslasi program
REKURSIF ITERATIF
#include
int faktorial(int n){
if ((n==0) || (n==1)){
return 1;
}
Pada pertemuan lalu, telah disinggung sedikit mengenai pengertian dan contoh penggunaan fungsi rekursif. Fungsi Rekursif merupakan proses perulangan dengan cara memanggil dirinya sendiri. Sedangkan fungsi iteratif adalah proses perulangan dengan menggunakan fungsi for, while dan repeat-until (do-while). Berikut contoh penggunaan fungsi rekursif dan iteratif :
Menghitung nilai faktorial dari sebuah bilangann faktorial didefinisikan secara rekursif sebagai berikut
n! = 1 untuk n=0 dan n=1
= n*(n-1)! , n>2Algoritma
Rekursif Iteratif
Fungsi faktorial(input n:integer):integer
Deskripsi
if (n=0) or (n=1) then
1ßfaktorial
else
n*faktorial(n-1)ßfaktorial Fungsi faktorial(input n:integer):integer
Deskripsi
if (n=0) or (n=1) then
1ßfaktorial
else
i:integer
begin
for i=1 to n do
hasil=hasil*i
end
hasilßfaktorialTranslasi program
REKURSIF ITERATIF
#include
int faktorial(int n){
if ((n==0) || (n==1)){
return 1;
}
else{
return (n*faktorial(n-1));
}
return (n*faktorial(n-1));
}
}main(){
int n;
cout<<“Masukan n! = “;cin>>n;
cout<<“hasilnya =”<<
return 0;
} #include
int faktorial(int n){
int hasil=1;
if ((n==0) || (n==1)){
return 1;
}else{
for(int i=1;i<=n;i++){
hasil=hasil*i;
}
return hasil;
}
}
main(){
int n;
cout<<“Masukan n! = “;cin>>n;
cout<<“hasilnya =”<<
return 0;
}
OutputDengan semakin lama Anda berlatih, anda akan mengetahui kapan menggunakan metode perulangan iteratif dan rekursif.
Beberapa kasus berikut diharapkan akan membuka wawasan Anda mengenai program Iteratif dan rekursif.Mencetak suatu kalimat dengan cara iteratif dan rekursif
REKURSIF ITERATIF
int n;
cout<<“Masukan n! = “;cin>>n;
cout<<“hasilnya =”<<
return 0;
} #include
int faktorial(int n){
int hasil=1;
if ((n==0) || (n==1)){
return 1;
}else{
for(int i=1;i<=n;i++){
hasil=hasil*i;
}
return hasil;
}
}
main(){
int n;
cout<<“Masukan n! = “;cin>>n;
cout<<“hasilnya =”<<
return 0;
}
OutputDengan semakin lama Anda berlatih, anda akan mengetahui kapan menggunakan metode perulangan iteratif dan rekursif.
Beberapa kasus berikut diharapkan akan membuka wawasan Anda mengenai program Iteratif dan rekursif.Mencetak suatu kalimat dengan cara iteratif dan rekursif
REKURSIF ITERATIF
#include
#include
void balik(char *k){
if(*k!=”){
balik(&k[1]);
cout<
}
}main(){
char *kata=”Politeknik”;
balik(kata);
cout<
return 0;
} #include
#include
void balik(char *k){
int i;
for(i=strlen(k)-1;i>=0;i–){
cout<
}
}main(){
char *kata=”Politeknik”;
balik(kata);
cout<
return 0;
}
Output
#include
void balik(char *k){
if(*k!=”){
balik(&k[1]);
cout<
}
}main(){
char *kata=”Politeknik”;
balik(kata);
cout<
return 0;
} #include
#include
void balik(char *k){
int i;
for(i=strlen(k)-1;i>=0;i–){
cout<
}
}main(){
char *kata=”Politeknik”;
balik(kata);
cout<
return 0;
}
Output
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
|
|
|
Iteratif
|
|
|
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!
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 :
- Program menampilkan statemen ”Menghitung perkalian dari 2 bilangan”.
- Program menampilkan instruksi kepada user untuk memasukkan input sebanyak 2 kali.
- Program memanggil fungsi perkalian.
- 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.
- Fungsi perkalian mengembalikan nilai ke fungsi main.
- 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 :
- Program menampilkan statemen ”Menghitung perkalian dari 2 bilangan”.
- Program menampilkan instruksi kepada user untuk memasukkan input sebanyak 2 kali.
- Program memanggil fungsi perkalian.
- Fungsi perkalian menghitung hasil perkalian 2 input tersebut dengan menjumlahkan bilangan pertama dengan dirinya sendiri sebanyak bilangan kedua secara looping(iteratif).
- Fungsi perkalian mengembalikan nilai ke fungsi main.
- 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;
}
Komentar
Posting Komentar