Anda di halaman 1dari 12

Algoritma Rekursif

Disusun Oleh :
Nama : Afdhal Akrom
NIM : 09101001006
Kelas : 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
(d). Dengan kata lain, proses (algoritma) untuk memperoleh nilai π dinyatakan
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) → integer
{mengembalikan nilai n!}

DEKLARASI
i : integer
F : integer

ALGORITMA
F←1
i ←1
while i ≤ n do
F←F*i
i ←i+i
endwhile
{i > n}

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) {sekumpulan aksi yang memanipulasi nilai x}
F (x) { aksi yang mengubah nilai x}
Endwhile
{not kondisi (x) }
Terminasi

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, n=0
T(n,x) = x, n=1
2xT(n-1,x)-T(n-2,x), 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 Pn(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) n! = 1 , jika n = 0 {basis}
(ii) n! = n x (n-1)! , jika n > 0 {rekurens}
maka 5! Dihitung dengan langkah berikut :
(1) 5! = 5 x 4!
(2) 4! = 4 x 3!
(3) 3! = 3 x 2!
(4) 2! = 2 x 1!
(5) 1! = 1 x 0!
(6) 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’) 0! = 1
(5’) 1! = 1 x 0! = 1 x 1 = 1
(4’) 2! = 2 x 1! = 2 x 1 = 2
(3’) 3! = 3 x 2! = 3 x 2 = 6
(2’) 4! = 4 x 3! = 4 x 6 = 24
(1’) 5! = 5 x 4! = 5 x 24 = 120

Algoritma rekursif untuk menghitung n! sebagai berikut :

function Faktorial(input n:integer) → integer


DEKLARASI
-
ALGORITMA
if n = 0 then
return 1 {basis}
else
return n * Faktorial (n-1) {rekurens}
endif
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/166-
implementasi-rekursif-dalam-pemrograman

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


Bandung : Informatika

Anda mungkin juga menyukai