Best Author
sangdedi

743,603
octa

486,235
fitrotinnikm

456,615
idjah

445,157
dwi

313,549
adit

310,096
resta-andara

275,123
benedict

261,583
rahadian

240,910
bara

228,942
nabilalalala

216,882
kurnitap_

154,132
kuswanto

140,175
suranto

100,765
admin

98,982
iwan

80,055
kupukupu

78,106

ebook algoritma rekursif

ALGORITMA REKURSIF

- Gunakan pendekatan divide-and-conquer :
-Membagi (divide) permasalahan ke dalam
bagian yang lebih kecil
-Menyelesaikan (conquer) masalah per bagian
secara recursive
-Menggabung penyelesaian per bagian menjadi
solusi masalah awal


Algoritma Rekursif (2)
- Urutan dengan nilai jumlah terbesar
kemungkinan berada pada:
-terletak di setengah input awal
-terletak di setengah input akhir.
-berawal disetengan input awal dan berakhir di
setengah input akhir.
- Hitung ketiga kemungkinan tersebut. Cari
yang lebih besar.
- Kedua kemungkinan pertama dapat dengan
mudah dihitung secara rekursif.


Menghitung kemungkinan ketiga
- dapat dilakukan dengan dua iterasi; lihat
program
- kemungkinan ketika berasal dari penjumlahan
dua bagian, bagian pertama berawal pada
setengah bagian input pertama berakhir di
tengah. Bagian kedua berasal dari urutan
index setengah +1 hingga setengah bagian
input akhir.


- Untuk bagian pertama gunakan iterasi dari
kanan-ke-kiri (right-to-left) mulai dari element
terakhir pada setengah input awal.
- Untuk bagian kedua, gunakan iterasi dari kiri-
ke-kanan, (left-to-right) mulai dari awal
setengah input akhir.


-Ilustrasi
4 -3 5 -2 -1 2 6 -2
4* 0 3 -2 -1 1 7* 5

Versi Rekursif
private int maxSumRec (int[] a, int left, int
right)
{
int center = (left + right) / 2;
if(left == right) { // Base case
return a[left] > 0 ? a[left] : 0;
}
int maxLeftSum = maxSumRec (a, left, center);
int maxRightSum = maxSumRec (a, center+1,
right);
for(int ii = center; ii >= left; ii–) {
leftBorderSum += a[ii];
if(leftBorderSum > maxLeftBorderSum)
maxLeftBorderSum = leftBorderSum;
}

Versi Rekursif (lanj.)

for(int jj = center + 1; jj <= right; jj++) {
rightBorderSum += a[jj];
if(rightBorderSum > maxRightBorderSum)
maxRightBorderSum = rightBorderSum;
}
return max3 (maxLeftSum, maxRightSum,
maxLeftBorderSum + maxRightBorderSum);
}
// publicly visible routine (a.k.a driver function)
public int maxSubSum (int [] a)
{
return maxSumRec (a, 0, a.length-1);
}

selamat berjuang….. : :lol:

Penulis :
Telah menulis sebanyak 1 artikel
Mendapatkan 3 komentar
  Rating tulisan 0 dari 5

3 Comments

  1. Administrator

    Administrator

    November 1, 2010 at 7:10 am

    wah, tingkat tinggi programmingnya yah :lol:
    selamat bergabung :-)

    VN:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. hasanudin

    November 5, 2010 at 5:14 pm

    tolong dong gmn cara mencari hasil tapi hasil itu keluar dngn sndr ya
    for yang tampilan ya
    2+4+6+8+10+16+18+20=110
    do
    while
    yag tmpilan ya
    10+8+6+4+2=30
    10+8+6+4 =28
    10+8+6 =24
    10+8 =18
    10 =10
    ______+
    110 :cry: :cry: :cry:

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  3. Romeo Benci Juliet

    May 5, 2011 at 4:04 am

    beri pencerahan… :mrgreen:

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>