Upload
yudha-arya
View
216
Download
0
Embed Size (px)
Citation preview
8/18/2019 TIstrukdat9.ppt
1/34
TRUKTUR DATA (10)
recursive function
Oleh Antonius Rachmat C, .Kom,M.Cs
8/18/2019 TIstrukdat9.ppt
2/34
f(0) = 3
f(n + 1) = 2f(n) + 3
Maka
f(0) = 3
f(1) = 2f(0) + 3 = 2⋅3 + 3 = 9
f(2) = 2f(1) + 3 = 2⋅9 + 3 = 21
f(3) = 2f(2) + 3 = 2⋅21 + 3 = 45
f(4) = 2f(3) + 3 = 2⋅45 + 3 = 93
Contoh fungsi ang !i!efinisi"an
secara re"ursif
8/18/2019 TIstrukdat9.ppt
3/34
#ungsi Re"ursif
• Fungsi yang berisi denisi dirinyasendiri
• Fungsi yang memanggil dirinyasendiri• r!sesnya "er#adi se$ara berulang%
ulang
• &ang 'erlu di'era"ikan adalas"!''ing r!le*
8/18/2019 TIstrukdat9.ppt
4/34
$%us & Minus
• +arena 'r!gram lebi singka" dan ada bebera'akasus yang lebi muda menggunakan fungsi yangrekursif
• %Memakan mem!ri yang lebi besar, karena se"ia'kali bagian dirinya di'anggil, dibu"ukan se#umlaruang mem!ri "ambaan-
• %Meng!rbankan esiensi dan ke$e'a"an• %r!blem. rekursi seringkali "idak bisa beren"i*
seingga mem!ri akan "er'akai abis dan 'r!gram
bisa ang-• %r!gram men#adi suli" diba$a• /aran. #ika memang bisa diselesaikan dengan
i"era"if, gunakanla i"era"if
8/18/2019 TIstrukdat9.ppt
5/34
'entu" Umum #ungsi
Re"ursif
return_data_type function_name(parameter_list){
...
function_name(...);
...}
8/18/2019 TIstrukdat9.ppt
6/34
$ro%ems
• Fak"!rial
5 = 5 4 3 2 14 = 4 3 2 1
erar"i 5 = 5 4
• Metode Iteratif /ala sa"u $ara un"uk mengi"ung adala denganmenggunakan l!!', yang mengalikan masing%masing
bilangan dengan asil sebelumnya- enyelesaiandengan $ara ini dinamakan i"era"if, yang mana se$araumum da'a" didenisikan sebagai beriku".
• n! = (n)(n-1)(n-2) … (1)
8/18/2019 TIstrukdat9.ppt
7/34
$rogram teratif
#include
int fact_it (int n)
{int i,fak;
/******************************************************
* Menghitung sebuah faktorial dengan proses looping *
******************************************************/
temp = 1;
for (i=1; i
8/18/2019 TIstrukdat9.ppt
8/34
#a"toria% Re"ursif
Metode Rekursif
• ara lain un"uk menyelesaikan 'ermasalaandi a"as adala dengan $ara rekursi, dimana n!adala asil kali dari n dengan (n-1)!-
• n"uk menyelesaikan (n-1)! adala samadengan n!, seingga (n-1)! adala n-1dikalikan dengan (n-2)!, dan (n-2)! adala n-2 dikalikan dengan (n-3)! dan se"erusnyasam'ai dengan n = 1, ki"a mengen"ikan'engi"ungan n!
8/18/2019 TIstrukdat9.ppt
9/34
#a"toria% Re"ursif (*)
• n = 1 if n=0 an$!r• n = n(n%1) if n60 indu$"i7e s"e'• 0 = 1• 1 = 1(1%1)
• = 10• = 11• = 1• 2 = 2(2%1)• = 21• = 21
• = 2• 3 = 3(3%1)• = 32• = 32• = 8
8/18/2019 TIstrukdat9.ppt
10/34
$rogram Re"ursif
#include
int fact_rec(int n)
{/**********************************************************
Menghitung sebuah faktorial secara rekursif
***********************************************************/
if (n < 0)return 0;
else if (n == 0)return 1;
else if (n == 1)return 1;
elsereturn n * fact_rec(n-1);
}void main()
{int fac;
printf("Masukkan berapa faktorial : ");
scanf("%d",&fac);
printf("Hasil faktorial dari adalah : %d\n", fact_rec(fac));
}
8/18/2019 TIstrukdat9.ppt
11/34
#ionacci
• /e'asang kelin$i yang baru lair (#an"andan be"ina) di"em'a"kan 'ada sua"u'embiakan- /e"ela dua bulan 'asangnkelin$i "ersebu" melairkan se'asangkelin$i kembar (#an"an dan be"ina)-/e"ia' 'asangan kelin$i yang lair #ugaakan melairkan se'asang kelin$i #ugase"ia' 2 bulan- era'a 'asangan kelin$iyang ada 'ada akir bulan ke%12
8/18/2019 TIstrukdat9.ppt
12/34
#io (*)
8/18/2019 TIstrukdat9.ppt
13/34
#io (+)
• :ere" Fib!na$$i adala sua"u dere"ma"ema"ika yang berasal dari
'en#umlaan dua bilangansebelumnya-
• 1, 1, 2, 3, 5, ;, 12, 19, <
8/18/2019 TIstrukdat9.ppt
14/34
#io teratif
• Secara iteratif
int fibonacci(int n){
int f1=1, f2=1, fibo;
if(n==1 || n==2) fibo=1; else{ for(int i=2;i
8/18/2019 TIstrukdat9.ppt
15/34
#io Re"ursif
int fibo_r (int n){
if(n==1) return 1;
else if(n==2) return 1;
else return fibo_r(n-1) + fibo_r(n-2);
}
8/18/2019 TIstrukdat9.ppt
16/34
'i%angan #ionacci
• n"uk = 40, F melakukan lebidari 300 #u"a 'emanggilan rekursif-F40 = 102-334-155• era"
• >"uran. ?angan membiarkan adadu'likasi 'r!ses yang menger#akanin'u" yang sama 'ada 'emanggilanrekursif yang berbeda-
• @de. sim'an nilai b!na$$i yangsuda dii"ung dalam sebua array
8/18/2019 TIstrukdat9.ppt
17/34
Dnamic $rogramming
• Dynamic Programming menyelesaikan sub%'ermasalaan denganmenyim'an asil sebelumnya-
int fibo2 (int n){
if (n
8/18/2019 TIstrukdat9.ppt
18/34
Tai% Re"ursif
• @m'lemen"asi rekursif yang lebi eA$ien"-
• endeka"an Tail Recursive-
public static long fib4 (int n){
return fiboelp(0!1!n);
}
static long fiboelp(long "! long #! int n){
if (n==0) return ";else if (n==1) return #;
else return fiboelp(#! "+#! n-1);
}
8/18/2019 TIstrukdat9.ppt
19/34
#$' (#a"tor $erse"utuan
Teresar)
• Misal F 22B dan 90.
• 22BC90 = 2 sisa 4B
•90C4B = 1 sisa 42• 4BC42 = 1 sisa 8
• 42C8 = ; sisa 0
F adala asil "erakir sebelum sisa = 0adala 6
8/18/2019 TIstrukdat9.ppt
20/34
#$' (*)
• @"era"if. F, m=22B dan n = 90
$o{
r = % & n;if (r'=0){
% = n;
n = r;
}} ile(r==0);
• Dam'ilkan n
8/18/2019 TIstrukdat9.ppt
21/34
8/18/2019 TIstrukdat9.ppt
22/34
%ustrasi #$' re"ursif
• F(22B,90) m6n
• F(4B,90) mn
• F(90,4B) m6n• F(42,4B) mn
• F(4B,42) m6n
• F(8,42) mn• F(42,8) m6n
• F(0,8) m=0
8/18/2019 TIstrukdat9.ppt
23/34
egen!a Menara -anoi
(o%eh !ouar! ucas aa! 1/)
• Seorang biarawan memiliki 3 menara.
• Diharuskan memindahkan 64 piringan emas.
• Diameter piringan tersebut tersusun dari ukuran kecil ke besar.• Biarawan berusaha memindahkan semua piringan dari menara
pertama ke menara ketiga tetapi harus melalui menara keduasebagai menara tampungan.
• Kondisi: Piringan tersebut hana bisa dipindahkan satu!satu. Piringan ang besar tidak bisa diletakkan di atas piringan ang lebih
kecil.
• "ernata : mungkin akan memakan waktu sangat lama #sampaidunia kiamat$.
• Secara teori% diperlukan &64!' perpindahan. (ika kita salahmemindahkan% maka )umlah perpindahan akan lebih banak lagi.
• (ika satu perpindahan butuh ' detik% maka total waktu angdibutuhkan lebih dari *++ )uta tahun ,,.
8/18/2019 TIstrukdat9.ppt
24/34
Toer of -anoi
8/18/2019 TIstrukdat9.ppt
25/34
To0er of -anoi
• >lg!ri"ma.
• ?ika n==1, 'indakan 'ringan dari > ke
• ?ika "idak.
• indakan n%1 'iringan dari > ke menggunakan sebagai "am'ungan
• indakan n%1 'iringan dari ke menggunakan > sebagai "am'ungan
8/18/2019 TIstrukdat9.ppt
26/34
$rogram
#include
void towers(int n, char awal, char akhir, char antara)
{
if(n==1)printf("Pindahkan piringan 1 dari %c ke %c\n", awal,akhir);
else{towers(n-1, awal, antara, akhir);
printf("Pindahkan piringan %d dari %c ke %c\n", n, awal, akhir);
towers(n-1, antara, akhir, awal);
}
}
void main(){
int n;
printf("Berapa piringan ? ");scanf("%d", &n);
towers(n, 'A', 'C', 'B');
}
8/18/2019 TIstrukdat9.ppt
27/34
Cature Toer of -anoi
8/18/2019 TIstrukdat9.ppt
28/34
%ustrasi To0er of -anoi
8/18/2019 TIstrukdat9.ppt
29/34
$roses Ker2a
8/18/2019 TIstrukdat9.ppt
30/34
$emang"atan
int power2(int m,int n){
int p=1;
for(int i=1;i
8/18/2019 TIstrukdat9.ppt
31/34
Ana%isis A%goritma
• >lg!ri"ma adala uru"an langka yang "e'a" dan'as"i dalam meme$akan sua"u masala se$aral!gis-
• ebera'a masala da'a" diselesaikan denganalg!ri"ma yang berma$am%ma$am asal asilnyasama-
• /e"ia' baasa 'emr!graman memiliki kelebiandan kekurangan dalam mengim'lemen"asikanalg!ri"ma dan se"ia' 'emr!gram da'a"
mengim'lemen"asikan sua"u alg!ri"ma dengan$ara yang berbeda%beda 'ula-
• amun alg!ri"ma da'a" dianalisis esiensi dank!m'leksi"asnya-
8/18/2019 TIstrukdat9.ppt
32/34
Ana%isis A%goritma
• enilaian alg!ri"ma didasarkan 'ada.• Gak"u eksekusi ('aling u"ama)• enggunaan mem!riCsumber daya• esederanaan dan ke#elasan alg!ri"ma
• >nalisis alg!ri"ma "idak muda dilakukan se$ara 'as"i,maka anya diambil.• !ndisi ra"a%ra"a (average case)• !ndisi "erburuk (worst case)
• Gak"u eksekusi di'engarui !le.
• ?enis da"a in'u"• ?umla da"a in'u"• emilian ins"ruksi baasa 'emr!graman
8/18/2019 TIstrukdat9.ppt
33/34
Ana%isis A%goritma
• Fak"!r%fak"!r yang menyuli"kananalisis disebabkan !le.
• @m'lemen"asi ins"ruksi !le baasa 'emr!graman yangberbeda
• e"ergan"ungan alg!ri"ma "erada' #enis da"a
• e"idak#elasan alg!ri"ma yang diim'lemen"asikan
• Hangka%langka analisis alg!ri"ma• Menen"ukan #enisCsifa" da"a in'u"-• Mengiden"ikasi abstract oeration dari da"a in'u"-
8/18/2019 TIstrukdat9.ppt
34/34
3.4T
• Dree dan Mani'ulasinya