TIstrukdat9.ppt

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