Rekursi adalah suatu kemampuan subrutin untuk memanggil dirinya sendiri. Adapun suatu subrutin yang memanggil dirinya seperti itu dinamakan subrutin rekursif. Pada beberapa persoalan, kemampuan seperti itu sangat berguna karena mempermudah solusi.
Topik 4_Eksplorasi Konsep LK Kelompok_Pendidikan Berkelanjutan
Presentation
1.
2. Rekursi atau recursion dalam matematika dan ilmu komputer
diartikan sebagai fungsi yang dalam definisinya mengimplementasikan
dirinya sendiri. Untuk lebih mudahnya, bisa dikatakan bahwa rekursi
adalah fungsi yang memanggil dirinya sendiri.
Namun demikian, rekursi tidaklah hanya merupakan istilah eksak
semata. Jika kita mau memperhatikan lagi dengan lebih teliti, ternyata
ada banyak contoh rekursi di sekeliling kita. Rekursi dalam dunia nyata
bisa terjadi salah satunya adalah jika kita meletakkan dua cermin secara
berhadapan dan sejajar. Bayangan yang terjadi pada kedua cermin
itulah rekursi. Dalam dunia matematika dan komputer, rekursi
khususnya digunakan untuk menyelesaikan perhitungan yang rumit dan
kompleks. Prinsip rekursi sebenarnya sederhana, yaitu memecah
masalah menjadi masalah-masalah yang lebih kecil. Dengan memecah
masalah menjadi bagian-bagian yang lebih kecil tersebut, masalah yang
sangat kompleks dan rumit sekalipun akan lebih mudah untuk
diselesaikan.
4. Rekursi adalah suatu kemampuan subrutin untuk
memanggil dirinya sendiri. Adapun suatu subrutin yang
memanggil dirinya seperti itu dinamakan subrutin rekursif.
Pada beberapa persoalan, kemampuan seperti itu sangat
berguna karena mempermudah solusi. Namun demikian
rekursi juga memiliki kelemahan, yakni memungkinkan
terjadinya overflow pada stack (stack tidak mampu
menangani permintaan pemanggilan subrutin karena
kehabisan memori). Itulah sebabnya harus ada jaminan
bahwa proses rekursi akan berhenti pada suatu waktu
tertentu yang menyebabkan pemanggilan fungsi berakhir.
Stack adalah area memori yang dipakai untuk variable lokal
dan untuk mengalokasikan memori ketika suatu fungsi
dipanggil.
6. 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)
7. 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 :
8.
9. 1. Contoh 9.1Tuliskan algoritma untuk menyelesaikan factorial seperti
yang 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++ :
10. #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;
}
11. 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 :
12. 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
13. 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.
14. 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
15. 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;
}
16. 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.
17. 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))
18. #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;
}