Suksesor bilangan asli adalah bilangan asli II. DEFINISI REKURSIF Secara tidak formal, rekursif dapat didefinisikan sebagai cara pendefinisian suatu objek menjadi lebih sederhana dalam terminologi dirinya sendiri Definisi terminologi : “Terminology is the study of and the field of activity concerned with the collection, description, processing and presentations of terms” Daya guna rekursif terletak pada kemampuannya mendefinisikan sekumpulan objek yang tidak terbatas dengan sebuah pernyataan terbatas Contoh – contoh fungsi rekursif antara lain : F(x) = 0 ,x=0 F(x) = 2F(x - 3) + x 1 adalah bilangan asli 2 ,x ≠ 0 Suksesor bilangan asli adalah bilangan asli Definisi rekursif disusun oleh dua bagian, yakni : Basis Bagian yang berisi kasus yang terdefinisi secara eksplisit. Bagian ini sekaligus menghentikan rekursif (dan memberikan sebuah nilai yang terdefinisi pada fungsi rekursif) Rekurens Bagian yang mendefinisikan objek dalam terminologi dirinya sendiri. Pada proses untuk menghitung faktorial dari n, diperoleh pernyataan : n!=1 n ! = n x (n - 1) ! ,n=0 {Basis} ,n>0 {Rekurens} Bentuk algoritma rekursif untuk mengitung faktorial n adalah : function Faktorial (input n : integer) integer {Mengembalikan nilai faktorial dari n} DEKLARASI : 1 http://www.mercubuana.ac.id
End if End if gcd (x, y) = gcd(y, x mod y) http://www.mercubuana.ac.id R1(x) {opsional} End if end function Return R(g(x)) R2(x) {Rekurens} {opsional} IV. CONTOH-CONTOH PENDEFINISIAN ALGORITMA REKURSIF Berikut ini adalah contoh pendefinisian algoritma rekursif : 1. Perpangkatan an Nyatakan an dalam ungkapan rekursif : an = a x a x a x … x a {sebanyak n kali} an = a x an – 1 {Rekurens} Tentukan kasus eksplisit yang tidak memerlukan pemanggilan rekursif lagi (basis) an = 1 jika n = 0 Secara matematis, proses perpangkatan an dapat dinyatakan sebagai : an = 1 ,n=0 {Basis} n n–1 ,n>0 {Rekurens} Berikut bentuk fungsi rekursif dari perpangkatan an : function=axaPangkat (input a, n : integer) integer {Mengembalikan nilai an} DEKLARASI : {Tidak ada} DEFINISI : If n = 0 then a Return 1 Return a * Pangkat(a, n-1) {Basis} Else {Rekurens} End if end function 2. Mencari pembagi bersama terbesar Untuk menghasilkan pembagi bersama terbesar (gcd) dapat dinyatakan sebagai berikut : gcd (x, y) = x , jika y = 0 {Basis} gcd (x, y) = gcd(y, x mod y) http://www.mercubuana.ac.id , jika y > 0 {Rekurens} 3
Return -1 End if 5 If (j > n) then Else Return Cari(A, n, x, j+1){Rekurens} End if End function 4. Mencari nilai maksimum dalam larik integer A[1 . . n] Maks (A, n) = {Basis} A[1] A[n] Maks (A, n-1) , jika n = 1 , jika A[n] > Maks(A, n-1) , jika Maks(A, n-1) > A[n] {Basis} {Rekurens} Bentuk rekursif dari algoritma pencarian nilai maksimum dalam larik integer A : Function Maks (input A : LarikInt, input n : integer) integer {Menemukan nilai maksimum dalam larik A} DEKLARASI : {Tidak ada} DEFINISI : If n = 1 then Return A[1] If A[n] > Maks(A, n-1) then Return A[n] Else Return Maks(A, n-1) {Basis} {Rekurens} Else End if End function http://www.mercubuana.ac.id 5