Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Rekursif.

Presentasi serupa


Presentasi berjudul: "Rekursif."— Transcript presentasi:

1 Rekursif

2 Soal Buatlah sebuah program untuk menghitung jumlah kuadrat dari selang yang sudah ditentukan! Input : sumsquare(5, 10) Output : = 355

3 Menggunakan Iterasi sumsquare (int x, int y ) { int i,jum; jum = 0;
for (i = x; i<=y;i++){ jum := jum + sqr(i); } printf(jum); };

4 Sumsquare (5, 10) for i = 5 jum := 0 + sqr(5);
for (i = x ; i<= y;i++) { jum := jum + sqr(i); } for (i = 5 ; i<= 10;i++) { jum := jum + sqr(i); } Penyelesaian dengan menggunakan pendekatan iteratif for i = 5 jum := 0 + sqr(5); for i = 6 jum := 25 + sqr(6); for i = 7 jum := sqr(7); for i = 8 jum := sqr(8); for i = 9 jum := sqr(9); for i = 10 jum := sqr(10); Atau dapat ditulis: Sqr(5+0)+Sqr(5+1)+Sqr(5+2)+Sqr(5+3)+Sqr(5+4)+Sqr(5+5)

5 Rekursif Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri.
Fungsi tersebut dipanggil di dalam dirinya sendiri

6 Why Rekursif? terdapat suatu sub masalah yang memiliki karakteristik yang mirip/sama masing-masing tahap melakukan algoritma melakukan proses yang sama, perbedaan hanya pada nilai parameter yang masuk Konsep formalisasi (bentuk umum atau rumus umum) sumsquare(x,y)  jika x=y selainnya sumsquare(x, sumsquare(x+1,y)) algoritma menjadi lebih singkat

7 Algoritma Rekursif Ciri masalah yang dapat diselesaikan secara rekursif adalah masalah itu dapat di-reduksi menjadi satu atau lebih masalah-masalah serupa yang lebih kecil Secara umum, algoritme rekursif selalu mengandung dua macam kasus: kasus induksi: satu atau lebih kasus yang pemecahan masalahnya dilakukan dengan menyelesaikan masalah serupa yang lebih sederhana (yaitu menggunakan recursive calls) kasus dasar atau kasus penyetop: satu atau lebih kasus yang sudah sederhana sehingga pemecahan masalahnya tidak perlu lagi menggunakan recursive-calls. Supaya tidak terjadi rekursi yang tak berhingga,setiap langkah rekursif haruslah mengarah ke kasus penyetop.

8 Bagaimana Bekerjanya? Ketika sebuah metode rekursif dipanggil S(n) maka aksi ini akan di push ke stack di register Demikian pula Ketika S(n) memanggil S(n-1) Hingga S(k) yang merupakan komponen penyetop dipanggil maka barulah isi stack di pop

9 Kekurangan Overhead cost lebih besar. Hal ini karena adanya penggunaan stack di memory. Algoritma rekursif relatif lebih sulit untuk menelusurinya. Adanya kemungkinan inefisiensi terselubung, sehingga program lebih lambat.

10 Pola Pada Sumsquare sumsquare(5,10) = (25 + sumsquare(6,10)) = (25 + (36 + sumsquare(7,10))) = (25 + (36 + (49 + sumsquare(8,10)))) = (25 + (36 + (49 + (64 + (sumsquare(9,10))))) = (25 + (36 + (49 + (64 + (81 + (sumsquare(10,10)))))) = (25 + (36 + (49 + (64 + ( ))))) = (25 + (36 + (49 + ( )))) = (25 + (36 + ( ))) = (25 + ( )) = ( ) = 355

11 Call Tree Sumsquare 10*10 sumsquare(5,10) 5*5 sumsquare(6,10) 6*6
7*7 sumsquare(8,10) 8*8 sumsquare(9,10) 9*9 sumsquare(10,10) +

12 Lakukan Penelusuran pada Prosedur Hapus berikut:
void hapus (simpul head){ simpul p,t; p = head; while (p!=NULL) { t = p; p = pberikut; delete(t); } void hapus (simpul head) { p=head; while (p!=NULL) { hapus(headberikut); delete(head); }

13 Iteratif VS Rekursif

14 Latihan Buatlah sebuah fungsi rekursif untuk mencetak n bilangan.
Buatlah sebuah fungsi rekursif yang outputnya adalah jumlah digit dari sebuah bilangan Buat program untuk menghitung deret S = n menggunakan function rekursi Buat program untuk menghitung deret S = n menggunakan function rekursi int sumOfDigits(int x); Misalnya: jika x adalah 234, fungsi harus mengembalikan , yaitu 9. jika x adalah 12, fungsi harus mengembalikan 1 + 2, yaitu 3. jika x adalah 39, fungsi harus mengembalikan12. Petunjuk: Gunakan operator / dan % untuk memudahkan perhitungan

15 int sumofdigit(int x) { If (x between 0 dan 9) return x; Else return x%10 + sumofdigit(x/10); } void cetak(n) If (n==0) Printf(“0”); printf(“n”); cetak(n-1);


Download ppt "Rekursif."

Presentasi serupa


Iklan oleh Google