Struktur Data Iterasi & Rekursif Rijal Fadilah S.Si Program Studi Teknik Informatika STMIK Balikpapan Definisi Iterasi • Iterasi dalam looping adalah proses yang berpengaruh dalam nilai dari variabel yang ditetapkan sebagai acuan looping. • Atau dapat pula dikatakan bahwa, iterasi adalah bagaimana penambahan nilai atau pengurangan dalam perulangan Iterasi • Kemampuan prosessor dalam melakukan pengulangan tugas atau instruksi • 4 konsep dalam iterasi : – Terdapat inisialisasi nilai – Terdapat bentuk modifikasi data – Statement yang membentuk menyertakan modifikasi data – Harus ada penghentian iterasi iterasi harus Mencetak angka 1 sampai 1000 #include <iostream> using namespace std; Contoh void main() { int i = 1; //kondisi ditetapkan (bahwa selama i lebih kecil atau sama dengan 1000 ada perintah yang diberikan pada program...) while (i <= 1000) { //perintah untuk mencetak nilai dari i dan kemudian membuat baris baru cout << i << “\n”; //iterasi ++i; //i = i + 1; //i += 1; } } Definisi Rekursif • Rekursif : metode matematika yakni definisi sebuah fungsi mengandung fungsi itu sendiri. • Rekursif : fungsi yang memanggil dirinya sendiri dan tergolong dalam dynamic programming. • Rekursif: suatu kemampuan subrutin / subprogram untuk memanggil dirinya sendiri. Contoh Rekursif • Contoh sederhana dari proses rekursi adalah proses menghitung nilai faktorial dari bilangan bulat positif 0! = 1 N! = N x (N-1)! untuk N > 0 • Jika diubah dalam notasi pemrograman : FAKTORIAL(0) = 1 FAKTORIAL(N) = N * FAKTORIAL(N-1) 1) 2) Persamaan 2) di atas merupakan contoh hubungan rekurens (recurrence relation), yang berarti bahwa nilai suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan argumen yang lebih kecil. Persamaan 1) yang tidak bersifat rekursif, disebut nilai awal. Setiap fungsi rekursi paling sedikit mempunyai 1 nilai awal; jika tidak, fungsi tersebut tidak bisa dihitung secara eksplisit. Proses Rekursif Perhatikan fungsi berikut : Function FAKT(N: Integer) : Integer; Begin If N = 0 then FAKT := 1 Else FAKT(N) := N * FAKT(N-1) End; Dari fungsi di atas bisa dilihat bahwa FAKT(N) bisa dihitung dari FAKT(N-1), dimana FAKT(N-1) bisa dihitung dari FAKT(N-2) dan seterusnya. Dengan demikian, fungsi di atas untuk N = 6 bisa kita lacak cara kerjanya . 4 24 FAKT 3 6 Proses Rekursif FAKT 2 2 FAKT 1 1 FAKT 1 0 FAKT • Untuk menghitung FAKT(N), fungsi harus memanggil nilai FAKT(N-1) yang telah diperoleh. Demikian juga untuk menghitung nilai FAKT(N-1), fungsi harus memanggil FAKT(N-2), dan seterusnya. • Notasi FAKT(N-1), yang digunakan untuk memanggil nilai fungsi sebelumnya, sering disebut dengan pemanggil rekursi atau recursion call. • Dalam ilustrasi di atas, pemanggil rekursi ditunjukkan dengan tanda anak panah. Sama halnya dengan prosedur atau fungsi yang lain, maka dalam rekursi pasti ada pemanggil rekursi. Proses Rekursif • Gambar tersebut bisa dijelaskan sebagai berikut (panah ke bawah menunjukkan nilai parameter actual yang dilewatkan ke dalam fungsi FAKT). • Pada saat program mengerjakan FAKT(4) ia akan melakukan test bahwa 4 tidak sama dengan 0 (karena FAKT(0) ditetapkan sebagai nilai awal). • Dengan demikian, ia perlu menghitung FAKT(N-1) (yang sama dengan FAKT(3)) terlebih dahulu. Sehingga program akan mengerjakan FAKT(3), sementara bilangan 4 dan operatornya akan disimpan lebih dahulu. • Proses diteruskan sampai mengeksekusi FAKT(0), yaitu nilai awal yang ditentukan, maka proses rekursif dihentikan. • Dengan telah diperolehnya nilai FAKT(0), maka segera bisa diperoleh nilai FAKT(1) yang sama dengan 1 * FAKT(0), yang memberi hasil sama dengan 1. Proses ini diteruskan sampai dihasilkan nilai akhir yang dikembalikan oleh fungsi FAKT ini yaitu sama dengan 24