Anda di halaman 1dari 12

Algoritma Rekursif

Disusun Oleh : Nama NIM Kelas : Afdhal Akrom : 09101001006 : SK2B

JURUSAN SISTEM KOMPUTER FAKULTAS ILMU KOMPUTER

UNIVERSITAS SRIWIJAYA 2011

Algoritma Rekursif

1. Proses Rekursif
Banyak objek di dalam matematika yang didefinisikan dengan cara menyatakan suatu proses (algoritma) yang menghasilkan objek tersebut. Sebagai contoh, diperoleh dengan membagi keliling lingkaran (K) dengan diameternya dinyatakan

(d). Dengan kata lain, proses (algoritma) untuk memperoleh nilai sebagai berikut : 1. Baca keliling lingkaran, K 2. Baca diameter lingkaran, d 3. Hitung = K/d

Yang jelas, proses tersebut harus berhenti dengan memberikan hail yang didefinisikan. Contoh objek lain yang diperoleh dari suatu proses adalah faktorial. Faktorial dari bilangan bulat tak negatif n didefinisikan sebagai berikut :

n!

= 1

, n=0

1 x 2 x x(n-1) x n , n>0

Sebagai contoh, 0! = 1 1! = 1 2! = 1 x 2 3! = 1 x 2 x 3 4! = 1 x 2 x 3 x 4

Proses untuk menghitung faktorial dari bilangan bulat n tak negatif dinyatakan dalam algoritma sebagai berikut:

function Faktorial (input n : integer) {mengembalikan nilai n!}

integer

DEKLARASI i : integer F : integer

ALGORITMA F i 1 1

while i n do F i endwhile {i > n} F *i i+i

Return F

Algoritma faktorial seperti diatas dinamakan algoritma iteratif karena ia mengerjakan pengulangan sekumpulan aksi sampai kondisi berhentinya tercapai. Fungsi faktorial mengembalikan nilai faktorial dari n. Algoritma iteratif adalah algoritma yang mengerjakan pengulangan aksi salam kondisi pengulangan masih dipenuhi (true). Secara umum, skema algoritma iteratif sebagai berikut:

procedure Iteratif (input x : xType) { procedur yang memanipulasi nilai x K. awal : x terdefinisi nilainya K. Akhir : sekumpulan aksi yang memanipulasi nilai x telah dilakukan } DEKLARASI

{ Kamus data lokal, jika ada} ALGORITMA : Inisialisasi

While KONDISI(x) do AKSI (x) F (x) Endwhile {not kondisi (x) } Terminasi {sekumpulan aksi yang memanipulasi nilai x} { aksi yang mengubah nilai x}

Sekarang coba perhatikan bahwa faktorial dai n dapat didefinisikan dalam terminologi faktorial juga : 0! = 1 1! = 1 2! = 1 x 2 3! = 1 x 2 x 3 4! = 1 x 2 x 3 x 4 Nyatakan, bahwa untuk n > 0 kita melihat bahwa n! = 1 x 2 x x (n-1) x n = (n-1)! X n Dengan menggunakan notasi matematika, maka n! didefinisikan dalam hubungan rekursif sebagai berikut : n! = 1 ,n=0

n x (n-1) ,n>0

Kita dapat melihat bahwa dalam proses perhitungan faktorial terdapat definisi faktorial itu sendiri. Cara pendefinisian seperti itu, yang mendifinisikan sebuah objek dalam terminologi dirinya sendiri dinamakan definisi rekursif. Proses yang melibatkan rekursifitas disebut dengan proses rekursif

2. Definisi Rekursif
Definisi rekursif diturunkan secara matematik. Definisi yang tidak normal menyatakan bahwa sebuah objek dikatakan rekursif jika ia didefinisikan menjadi lebih sederhana dalam terminologi dirinya sendirinya. Nicklaus Wirth mendefinisikan rekursif sebagai berikut : An Objeck is said be recursive if it partially consist or is defines in terms of it self Dalam kehidupan sehari hari banyak terdapat objek yang rekursif. Tahukah anda bahwa, kalau diamati dengan saksama, daun pakis dibentuk oleh ranting ranting daun yang mempunyai pola yang miripdengan daun pakis itu sendiri. Setiap ranting disusun lagi oleh ranting daun dengan pola mirip. Hal yang sama juga tampak pada pohon cemara. Objek rekursif yang khas ini disebut fraktal. Dalam bidan grafik dan seni, fraktal dimanfaatkan untuk membangkitkan gambar gambar yang indah dan menawan. Daya guna rekursif terletak pada kemampuannya mendefinisikan sekumpulan objek yang tidak terbatas dengan sebuah pernyataan terbatas. Sejumlah perhitungan yang tidak berhingga misalnya, dapat digambarkan dengan algoritma rekursif (teks algoritma adalah terbatas),seolah olah algoritma tersebut mengandung pengulangan yang tidak tampak secara eksplisit. Rekursif merupakan pekakas yang sangat penting di dalam matematika dan pemprograman. Dalam matematika, banyak ditemukan fungsi yang rekursif, misalnya polinom Chebysev berikut : 1, T(n,x) = x, 2xT(n-1,x)-T(n-2,x), n=0 n=1 lainnya

Berikut ini diberikan contoh contoh fungsi rekursif yag lain : 1. Sembarang Fungsi Rekursif a) F(x) = 0 ,x=0

b) F(x) = 2 F (x-1) +x2 , x 0 2. Turunan Fungsi

3. Bilangan Asli a) 1 adalah bilangan asli b) Suksesor bilangan asli adalah biloangan asli 4. Polinom interpolasi Newton P n(x) yang melalui titik titik (xo,yo),(x1,y1 ), , (xn,yn) didefinisikan sebagai berikut : a) Po(x) = yo b) Pn(x) = pn-1(x) + an(x-xo)(x-x1)(x-xn-1) 5. Dalam pemprograman, salah satu struktur data yang penting adalah pohon biner (binary tree). Sebuah pohon biner didefinisikan sebagai berikut: a) Kosong adalah pohon (disebut juga pohon kosong) b) Jika t1 dan t2 pohon, maka adalah pohon

Jika diperhatikan dari contoh contoh diatas adalah maka definisi rekursif disusun oleh dua bagian : (i) Basis Bagian yang berisi kasus yang terdefinisi secara eksplisit. Bagian ini juga sekaligus menghentikan rekursif (dan memberikan sebuah nilai yang terdefinisi pada fungsi rekursif) (ii) Rekurens Bagian ini mendefinisikan objek dalam terminologi dirinya sendiri

Bagian (ii) menyatakan bahwa definisi rekursif memungkinkan komputasi yang tidak berhenti. Pada setiap kali pendefinisian, akan dihasilkan bentuk yang makin sederhana, sehingga pada suatu saat pendefinisian itu akan berhenti. Bagian (i) berisi kasus yang menghentikan pendefinisian rekursif. Tinjau kembali perhitungan n! secara rekursif. Dengan mengingat kembali definisi rekursif dari faktorial: (i) (ii) n! = 1 n! = n x (n-1)! , jika n = 0 , jika n > 0 {basis} {rekurens}

maka 5! Dihitung dengan langkah berikut : (1) 5! = 5 x 4! (2) (3) (4) (5) (6) 4! = 4 x 3! 3! = 3 x 2! 2! = 2 x 1! 1! = 1 x 0! 0! = 0

Pada basis (6) kita memperoleh nilai yang terdefinisi secara langsung dan bukan faktorial dari bilangan lainnya. Dengan melakukan runut balik (backtrack) dari baris (6) ke baris (1), kita mendapatkan nilai pada setiap baris untuk menghitung hasil pada baris sebelumnya : (6) (5) (4) (3) (2) (1) 0! = 1 1! = 1 x 0! = 1 x 1 = 1 2! = 2 x 1! = 2 x 1 = 2 3! = 3 x 2! = 3 x 2 = 6 4! = 4 x 3! = 4 x 6 = 24 5! = 5 x 4! = 5 x 24 = 120

Algoritma rekursif untuk menghitung n! sebagai berikut :

function Faktorial(input n:integer) DEKLARASI ALGORITMA if n = 0 then return 1 else

integer

{basis}

return n * Faktorial (n-1) endif

{rekurens}

Program Rekursif menghitung faktorial

#include <stdio.h> #include <conio.h> int pangkat(int a, int n) { if(a==0) { return 1; } else { return a * pangkat(a, n-1); } } int fak (int n){ int i, jumlah; jumlah=0; for(i=1;i<=n;i++) { jumlah += i*i; } return jumlah; } void main() { int hasil, a; printf("Program Menghitung pangkat secara rekursif\n"); printf("banyaknya nilai = ");scanf("%d", &a); hasil = fak(a); printf("Hasil pangkat = %d", hasil); getch(); }

Program Menghitung Deret Pangkat Dengan Rumus




:: Algoritma
Function rekursif (input : Larik A, int x Output : float f)

DEKLARASI x : integer p : integer

ALGORITMA float rata (larik A, float n, int p) if p == 0 then return (A[0]/n) else return(A[p]/n + rata(A, n, p-1)); endif

float f(larik A, float x, float rata, int n,int p) if p==n then return A[n] else return(A[n] + (x-rata)*f(A, x, rata, n+1, p)) endif

::Source Code::
#include <stdio.h> #include <conio.h> #define maks 10 typedef float larik[maks]; float rata(larik A, float n, int p) { if(p == 0) return(A[0]/n); else return(A[p]/n + rata(A, n, p-1)); } float f(larik A, float x, float rata, int n, int p) { if(p == n) return(A[n]); else return(A[n] + (x-rata)*f(A, x, rata, n+1, p)); } float sigma(larik A, float x, int p) { float n = p+1; return(f(A, x, rata(A, n, p), 0, p)); }

void main() { int x, n, p; float hasil; larik A ; printf("Program Menghitung deret Pangkat by Afdhal\n\n"); printf("Input Nilai X --> ");scanf("%d", &x); printf("Input Jumlah Elemen Larik[1..10] --> ");scanf("%d", &p); printf("Input Nilai Elemen Larik \n"); for (int n=0;n<=p;n++){ printf("A[%i] --> ", n); scanf("%f", &A[n]); } hasil = sigma(A,x,p); printf("Hasil dari f(%i) = %.2f", x, hasil); getch(); }

::PrintScreen::

Referensi

http://dedekurniadi.web.id/2006/11/02/membuat-rekursif-dengan-c/

http://www.gudangpustaka.com/kategori/teknologi-informasi/programming/166implementasi-rekursif-dalam-pemrograman

Munir, Renaldi.2009.Algoritma dan Pemprograman dalam Bahasa Pascal dan C. Bandung : Informatika