Presentation
description
Transcript of Presentation
Rekursi atau recursion dalam matematika dan ilmu komputerdiartikan sebagai fungsi yang dalam definisinya mengimplementasikandirinya sendiri. Untuk lebih mudahnya, bisa dikatakan bahwa rekursiadalah fungsi yang memanggil dirinya sendiri.
Namun demikian, rekursi tidaklah hanya merupakan istilah eksaksemata. Jika kita mau memperhatikan lagi dengan lebih teliti, ternyataada banyak contoh rekursi di sekeliling kita. Rekursi dalam dunia nyatabisa terjadi salah satunya adalah jika kita meletakkan dua cermin secaraberhadapan dan sejajar. Bayangan yang terjadi pada kedua cerminitulah rekursi. Dalam dunia matematika dan komputer, rekursikhususnya digunakan untuk menyelesaikan perhitungan yang rumit dankompleks. Prinsip rekursi sebenarnya sederhana, yaitu memecahmasalah menjadi masalah-masalah yang lebih kecil. Dengan memecahmasalah menjadi bagian-bagian yang lebih kecil tersebut, masalah yangsangat kompleks dan rumit sekalipun akan lebih mudah untukdiselesaikan.
1. Apa rekursi ?
2. Berikan contoh-contoh rekursi ?
Rekursi adalah suatu kemampuan subrutin untukmemanggil dirinya sendiri. Adapun suatu subrutin yangmemanggil dirinya seperti itu dinamakan subrutin rekursif.Pada beberapa persoalan, kemampuan seperti itu sangatberguna karena mempermudah solusi. Namun demikianrekursi juga memiliki kelemahan, yakni memungkinkanterjadinya overflow pada stack (stack tidak mampumenangani permintaan pemanggilan subrutin karenakehabisan memori). Itulah sebabnya harus ada jaminanbahwa proses rekursi akan berhenti pada suatu waktutertentu yang menyebabkan pemanggilan fungsi berakhir.Stack adalah area memori yang dipakai untuk variable lokaldan untuk mengalokasikan memori ketika suatu fungsidipanggil.
Manfaat
fungsi rekursif
serta
perbandingann
ya dengan
looping/perula
ngan
1. Adanya titik pemberhentian (pengendali
rekursi)
Contoh : faktorial(n), n=0, maka n!=1
2. Adanya langkah rekursi yang menuju pada
stopping state (induksi)
Contoh : faktorial = n* faktorial (n-1)
1. Sifat = perulangan, maka harus ada proses yang menghentikan
rekursi
2. Proses yang menuju penghentian rekursi
Persoalan rekursi biasa dijumpaipada matematika. Sebagai
contoh, proses rekursi dapat digunakan untuk menghitung
factorial. Dalam hal ini suatu factorial m! didefinisikan
sebagai berikut :
1. Contoh 9.1Tuliskan algoritma untuk menyelesaikan factorial sepertiyang dipaparkan pada gambar 9.1 tuangkan pula ke dalam program.
Algoritma :
SUBRUTIN factorial (n)
JIKA n = 0 ATAU 1 MAKA
NILAI-BALIK 1
SEBALIKNYA
NILAI BALIK n x factorial (n-1)
AKHIR-JIKA
AKHIR-SUBRUTIN
Program :
Implementasi dalam program C++ :
#include <iostream.h>
long int faktorial (unsigned int n)
{
if (n == 0 || n == 1)
return 1;
else
return n * faktorial (n-1);
}
int main ()
{
int n;
long int hasil;
cout << "n = ";
cin >> n;
hasil = faktorial (n);
cout << n << "! = " << hasil;
return 0;
}
2. Contoh 9.2 Fungsi Fibonacci dapat dinyatakan dalam bentuk rekursif
seperti berikut :
fib (n)= 0,untuk n = 0
fib (n)= 1,untuk n = 1
fib (n)= fib (n-1)+fib (n-2),untuk n > 1
contoh hubungan antara n dan hasil fungsi :
Tuangkanlah dalam bentuk algoritma maupun program
SUBRUTIN fib(n)
JIKA n = 0 MAKA
NILAI-BALIK 0
SEBALIKNYA
JIKA n =1 MAKA
NILAI –BALIK 1
SEBALIKNYA
NILAI-BALIK fib(n-1)+fib(n-2)
AKHIR-JIKA
AKHIR-JIKA
AKHIR-SUBRUTIN
2. FPB (factor persekutuan terbesar) dapat diselesaikan
secara rekursi dengan cara seperti berikut :
Fpb(x,y) = y jika y ≤ x dan sisa_pembagian (x,y) = 0
Fpb(x,y) = fpb(y,x) jika x < y
Fpb(x,y) = fpb(sisa_pembagian(x,y)) untuk keadaan yang lain
Cobalah menuangkannya dalam bentuk algoritma.
Implementasikan pula programnya.
Jawab :
2. a. Bentuk algoritma
Subrutin FPB
Jika y ≤ x dan sis (x,y) = 0 maka nilai baliknya = y
Jika x < y maka
Nilai baliknya =fpb (x,y)
Sebaliknya
Nilai baliknya fpb(y, sisa (x,y))
Akhir jika
Akhir subrutin
b. Bentuk Programnya
#include<iostream>
using namespace std;
int fpb(int x,int y)
{
int rem; if(y==0)return(x); else
{
rem =
x%y;return(fpb(y,rem));}}
int main()
{
int a,b;
cout<<"\nMasukkan dua bilangan :";
cin >>a>>b;
cout<<"Faktor Persekutuan Terbesar
dari" <<a<< "dan" <<b;
cout<<"adalah"<<fpb(a,b)<<endl;
return 0;
}
3. Subrutin komite(n, k) digunakan untuk menentukan
jumlah kemungkinan komite yang terdiri dari k orang
yang dipilih dari n orang yang tersedia. Contoh,
komite(4,3) menghasilkan 4 kemungkinan. Taruhlah
keempat orang tersebut adalah A,B,C,dan D, maka
kemungkinan pasangan keempat orang untuk
membentuk komite yang terdiri atas 3 orang bisa
berupa ABC, ABD, ACD dan BCD. Subrutin tersebut
dapat dituangkan menurut rumusan seperti berikut :
Komite(n,k) = komite(n-1,k) + komite(n-1,k-1) untuk
n,k ≥1
Cobalah bentuk algoritma beserta programnya.
Algoritma
Subrutin komite(n,K)
Jika n = 0 atau n = 1 maka
Nilai balik = 1
Sebaliknya
Nilai balik = n x faktorial (n-1)
Akhir jika
Akhir subrutin
Hasil = faktorial (n/(faktorial) (k) x faktorial (n-k))
#include <iostream.h>
long int komite (int n){
if (n==0||n==1)
return 1;
else
return n*komite(n-1);
}
int main(){
int n;
int k;
long int hasil;
cout<<"Masukkan nilai n: ";
cin>>n;
cout<<"Masukkan nilai k: ";
cin>>k;
hasil= komite(n)/(komite(k)*komite(n-k));
cout<<"Komite (n,k) = Komite ("<<n<<","<<k<<") = "<<hasil;
return 0;
}