Presentation

20

description

TKJ

Transcript of Presentation

Page 1: Presentation
Page 2: 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.

Page 3: Presentation

1. Apa rekursi ?

2. Berikan contoh-contoh rekursi ?

Page 4: Presentation

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.

Page 5: Presentation

Manfaat

fungsi rekursif

serta

perbandingann

ya dengan

looping/perula

ngan

Page 6: Presentation

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)

Page 7: Presentation

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 :

Page 8: Presentation
Page 9: Presentation

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++ :

Page 10: Presentation

#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;

}

Page 11: Presentation

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 :

Page 12: Presentation

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

Page 13: Presentation

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.

Page 14: Presentation

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

Page 15: Presentation

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;

}

Page 16: Presentation

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.

Page 17: Presentation

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))

Page 18: Presentation

#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;

}

Page 19: Presentation
Page 20: Presentation