ARRAY , REKURSIF DAN ITERATIF
A. ARRAY
a.Pengertian Array
Array merupakan Tipe data terstruktur yang berguna untuk menyimpan sejumlah data yang bertipe sama. Bagian yang menyusun array disebut elemen array, yang masing-masing elemen dapat diakses tersendiri melalui indeks array.
“Elektronika” |
“Telekomunikasi” |
“Elektro Industri” |
“Teknologi Informasi” |
“Teknik Kimia” |
b. Jenis-jenis Array
v Array satu dimensi
Adalah sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui 1 indeks atau subskrip.
Bentuk umum pendeklarasian
”Nama_array[jumlah_eleman]”
v Array dua dimensi
Adalah sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses melalui 2 indeks atau subskrip yaitu indeks baris dan indeks kolom.
Bentuk umum pendeklarasian:
”Nama_array[jumlah_eleman_baris][jumah_elemen_kolom]”
Adalah sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses melalui 2 indeks atau subskrip yaitu indeks baris dan indeks kolom.
Bentuk umum pendeklarasian:
”Nama_array[jumlah_eleman_baris][jumah_elemen_kolom]”
v Array multidimensi
Adalah sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses melalui banyak indeks atau subskrip. Array seperti ini biasa digunakan untuk matik, array 2 dimensi juga termasuk kedalam array multidimensi.
1.Pengertian Rekursif
Rekursif berarti bahwa suatu proses bisa memanggil dirinya sendiri. Menurut definisi dalam Microsoft Bookshelf, Rekursif adalah kemampuan suatu rutin untuk memanggil dirinya sendiri. Dalam Rekursif sebenarnya terkandung pengertian prosedur dan fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur dan fungsi harus dipanggil lewat pemanggil prosedur dan fungsi. Rekursif merupakan teknik pemrograman yang penting dan beberapa bahasa pemrograman mendukung keberadaan proses rekursif ini. Dalam prosedur dan fungsi, pemanggilan ke dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan akan berakhir.
Contoh paling sederhana dari proses rekursif ini adalah proses menghitung nilai factorial dari suatu bilangan bulat positif dan mencari deret Fibbonacci dari suatu bilangan bulat.
- Nilai factorial secara rekursif dapat ditulis sebagai
0 ! = 1
N ! = N x (N-1) !
yang secara pemrograman dapat ditulis sebagai
Faktorial(0) = 1 (1)
Faktorial(N) = N*Faktorial(N-1) (2)
Persamaan (2) di atas adalah 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) tidak bersifat rekursif, disebut nilai awal atau basis. Setiap fungsi rekursif paling sedikit mempunyai satu nilai awal, jika tidak fungsi tersebut tidak bisa dihitung secara eksplisit.
- Bilangan Fibbonacci didefinisikan sebagai berikut
1 1 2 3 5 8 13 21 34 55 89 …
2.Rekursif Versus Iteratif
Dalam beberapa situasi, pemecahan secara rekursif maupun secara iteratif mempunyai keuntungan dan kekurangan yang bisa saling diperbandingkan. Adalah cukup sulit untuk menentukan mana yang paling sederhana, paling jelas, paling efisien dan paling mudah disbanding yang lain. Boleh dikatakan pemilihan cara iterative maupun rekursif merupakan kesenangan seorang programmer dan tergantung konteks permasalahan yang akan dipecahkan sesuai dengan kesanggupan yang bersangkutan.
Perhatikanlah contoh berikut :
Contoh 1.
function FACT(N : integer) ® integer
{mengirimkan bilangan factorial dengan cara rekursif}
Deklarasi
Deskripsi
if (N=0) then
return 1 {Basis}
else
return(N*FACT(N-1)) {Rekurens}
endif
Contoh 2.
function FIBO(N : integer) ® integer
{mengirimkan bilangan fibbonacci dengan cara rekursif}
Deklarasi
Deskripsi
if ((N=1) or (N=2)) then
return 1 {Basis}
else
return(FIBO(N-1)+ FIBO(N-2)) {Rekurens}
endif
Contoh 3.
function FACT(N : integer) ® integer
{mengirimkan bilangan factorial dengan cara iteratif}
Deklarasi
x,i : integer
Deskripsi
x ¬ 1
for i = 1 to N do
x ¬ i*x
endfor
return x
Contoh 4.
function FIBO(N : integer) ® integer
{mengirimkan bilangan fibbonacci dengan cara iteratif}
Deklarasi
Fibbonacci, Akhir, Bantu, i : integer
Deskripsi
If N=0 then
return 0
else
i¬1
Fibbonacci ¬1
Akhir ¬0
while (i¹N)do
Bantu ¬ Fibbonacci
i ¬ i + 1
Fibbonacci ¬ Fibbonacci + Akhir
Akhir ¬ Bantu
Endwhile
return Fibbonacci
endif
3.Fungsi Rekursif
Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Fungsi ini akan terus berjalan sampai kondisi berhenti terpenuhi, oleh karena itu dalam sebuah fungsi rekursif perlu terdapat 2 blok penting, yaitu blok yang menjadi titik berhenti dari sebuah proses rekursi dan blok yang memanggil dirinya sendiri.
Contoh – contoh penerapan rekursif:
1. Fungsi cetak ke layar
Fungsi ini mencetak nilai dari paremeter yang dilempar kepadanya. Jika nilai dari parameter tersebut > 0, fungsi akan mencetak nilai dari parameter tersebut dan kemudian memanggil dirinya lagi, jika tidak, program berhenti.

Untuk melihat lebih jelas, terapkan fungsi di atas dalam sebuah program.
2. Fungsi pangkat
Fungsi ini digunakan untuk menghitung nilai: Xn dengan n berupa bilangan bulat positif. Solusi dari persoalan ini:
JIKA n = 1 MAKA Xn = X
SELAIN ITU: Xn = X * Xn-1
Sebagai contoh diambil nilai X=5 dengan n=3, pelukisan proses pemecahannya:

Berikut adalah fungsi pangkat dengan menggunakan solusi di atas:

a adalah bilangan yang dipangkatkan, sedangkan b adalah bilangan pemangkatnya. Jika nilai dari b adalah 1, return a, lainnya return a dikali dengan fungsi pangkat dengan parameter a dan b-1. Untuk lebih jelas, terapkan dalam program.

3. Fungsi faktorial
Faktorial dapat dibuat dengan menerapkan rekursi. Berikut ini adalah fungsi faktorial rekursif dari sebuah program.
![]() |
Fungsi faktorial diatas akan melakukan rekursi selama nilainya > 1. Sebagai contoh:
4!, pelukisan penyelesaiannya:
![]() |
Untuk lebih jelas, terapkan fungsi di atas dalam sebuah program.
Latihan
Buatlah program untuk menghitung FPB (faktor persekutuan terbesar) dari dua bilangan dengan menggunakan metode rekursif. Untuk membantu, berikut diberikan penyelesaian secara rekursif dari FPB:
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(y, sisa_pembagian(x,y)) untuk keadaan yang lain
Buatlah fungsi untuk membalik suatu bilangan dengan cara rekursif. Sebagai contoh, bilangan 1234 ditampilkan menjadi 4321!
Buatlah deret fibonaci dengan menerapkan rekursi!
UNGUIDED
1.Buat lah func rekursif untuk menghitung :
a. Deret = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + … + n
Contoh inputan
n = 3 maka output = 6 (1+2+3)
n = 4 maka output = 10 (1+2+3+4)
b. Deret = 2 + 4 + 6 + 8 + 10 + 12 + 14 + … + n
Contoh inputan
n = 3 maka output = 12 (2+4+6)
n = 4 maka output = 20 (2+4+6+8)
2.Buat func rekursif untuk Tribollaci
bilangan ke N dari tribollaci adalah jumlah dari bilangan ke n-3 ditambah bilangan ke n-2 ditambah bilangan ke n-1.
F(n) = f(n-3) + f(n-2) + f(n-1)
1 1 1 3 5 9 17 31 57 105
TAKE HOME
1.Buat lah func rekursif untuk menentukan combination dari 2 bilangan dengan bantuan segitiga pascal

Misal
inputan = 1 1. Output = 1 (baris 1 kolom 1)
inputan = 2 2. Output = 2 (baris 2 kolom 2)
inputan = 3 2. Output = 3 (baris 3 kolom 2)
inputan = 4 3. Output = 6 (baris 4 kolom 3)
Tree..
Tree merupakan struktur hirarkis dari sebuah susunan data. Dalam tree,kita mempunyai sebuah Root yang nantinya akan menjadi awal dari tree tersebut. Untuk tree, kita juga membutuhkan struct. Ada banyak jenis-jenis Tree, tapi yang akan kita pelajari saat ini adalah implementasi dari Binary Tree, yaitu Tree yang hanya memiliki 2 tangan.
Langkah awal membuat Binary Tree adalah membuat struct seperti pada inisialisasi double linked list.


Setelah kita membuat struct, kita membuat void main yang di dalamnya kita deklarasikan sebuah variable yang bertipe data Node (struct yang telah kita buat) untuk nantinya digunakan sebagai root.

Setelah itu kita memanggil fungsi untuk tambah data.
Dalam fungsi tambah, parameter yang dikirim adalah “alamat dari Node root” dan data. Karena itu kita harus membuat parameter pada fungsi tambah yang dapat menyimpan alamat dan data.
Jika ada masukkan data, fungsi yang kita buat harus selalu mengecek dari root, karena itu void main selalu mengirim alamat dari root. Mengapa bukan mengirim rootnya tetapi mengiri alamat root? Sebab root bukan variable global, sehingga kita harus mengakses alamatnya langsung. Setelah alamat dari root dikirim maka kita simpan alamat root tersebut dalam Node lain (sebut saja pohon). Ada 3 kondisi dalam memasukkan data:
1. Jika nilai dari pohon adalah NULL. Maka kita buat Node baru untuk menampung nilai dan kemudian kita copy Node baru ke Node pohon.
2. Jika nilai dari pohon->data kurang dari databaru. Maka dia akan memanggil dirinya sendiri dengan parameter alamat dari (*pohon)->kiri dan databaru.

TEKNIK ITERATIF
Teknik Iteratif merupakan suatu teknik pembuatan algoritma dengan pemanggilan procedure beberapa kali atau hingga suatu kondisi tertentu terpenuhi
Contoh :
Teknik Iteratif pada algoritma untuk menghitung faktorial dari bilangan bulat positif n, adalah sebagai berikut :
Function FAK (n : integer) : integer
FAK=1
For i = 1 TO n
FAK = FAK * i
NEXT i
END FAK
Gambaran jalannya proses algoritma tersebut adalah sebagai berikut :
Misal n = 5, maka : FAK = 1, kemudian i | FAK |
1 | 1 * 1 = 1 |
2 | 1 * 2 = 2 |
3 | 2 * 3 = 6 |
4 | 6 * 4 = 24 |
5 | 24 * 5 = 120 |
Contoh :
BARISAN BILANGAN FIBBONACI → 1, 1, 2, 3, 5, 8, 13, 21, . . .
Teknik Iteratif pada algoritma untuk menentukan suku ke-n dari barisan bilangan Fibbonaci, adalah sebagai berikut :
1. Set x, y, n, i, f : integer
2. x ← 1 ; y ← 1
3. If n 〉 2 then
begin
4. for i ← 3 to n do
begin
5. F ← x + y
6. x ← y
7. y ← F
end
else
8. F ← x
9. Write(F)
End
Gambaran jalannya proses algoritma tersebut adalah sebagai berikut :
Misal n = 5, maka :
x=1, y=1, kemudian i | F | x | y |
3 | 1 + 1 = 2 | 1 | 2 |
4 | 1 + 2 = 3 | 2 | 3 |
5 | 2 + 3 = 5 | 3 | 5 |
Model Iteratif

Model Interative
Perbedaan yang paling terlihat antara model waterfall dengan model intertif ini adalah proses kerja pengembangan sistem tersebut. Jika pada waterfall satu arah, sedangkan pada iteratif terdapat testing dan evaluasi yang menguji apakah aplikasi tersebut masih dapat digunakan atau tidak. Jika system tersebut ternyata tidak baik untuk digunakan lagi maka akan dilakukan identifikasi masalah lagi dan kembali untuk dikembangkan.