Rekursi Ema Utami STMIK AMIKOM Yogyakarta Mendefinisikan Barisan Bilangan dengan Rekursi Jika kita mempunyai sebuah barisan bilangan, maka barisan bilangan tersebut dapat dinyatakan dalam beberapa cara. 1. Menuliskan beberapa suku pertama dari barisan tersebut dengan harapan bahwa pembaca dapat mengerti kelanjutan suku-suku dari barisan tersebut. 2. Menyatakan suatu barisan bilangan dengan rumus. Misalnya kita mempunyai sebuah barisan bilangan aritmatika dimana suku pertama dari barisan bilangan tersebut adalah 3 dan beda antar dua suku yang berdekatan adalah 2 maka kita dapat menyatakan barisan bilangan tersebut dengan rumus. 3. Menyatakan barisan bilangan tersebut secara rekursi. Barisan bilangan yang didefinisikan secara rekursi harus ditentukan dulu suku pertama ataupun kondisi awal dari barisan tersebut dan suku-suku selanjutnya dalam hubungannya dengan suku yang sudah dinyatakan sebelumnya. Kesimpulan di atas adalah bahwa kita dapat mendefinisikan suatu barisan bilangan dengan menggunakan rekursi. Apa pengertian rekursi itu sendiri? Rekursi adalah proses yang bisa memanggil dirinya sendiri. Bentuk rekursi merupakan alternatif dari bentuk iterasi atau perulangan. Ada beberapa masalah yang lebih cocok dipecahkan dengan bentuk rekursi. Tetapi secara umum bentuk rekursi biasanya kurang efisien dibandingkan bentuk iterasi karena rekursi memanggil dirinya sendiri sehingga menyebabkan waktu pemrosesan yang lebih besar dibandingkan bentuk iterasi biasa. Proses rekursi akan menggunakan memory stack, semakin lama proses rekursi dikerjakan maka memory stack akan terus berkurang yang berakibat memory stack habis. Dalam rekursi sebenarnya terkandung pengertian fungsi, perbedaannya adalah: 1. Rekursi bisa memanggil dirinya sendiri. 2. Fungsi harus dipanggil lewat pemanggil fungsi (function call). Suatu fungsi tidak hanya bisa memanggil fungsi lain, melainkan juga bisa memanggil dirinya sendiri. Pemanggilan kepada dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan berakhir sehingga dalam rekursi harus ada syarat-syarat berikut: 1. Ada titik pemberhentian (stopping state) sebagai pengendali rekursi. 2. Adanya langkah induksi yang menuju pada titik pemberhentian. Contoh Kasus Perkalian Dua Buah Bilangan Bulat Positif a. Algoritma dengan pseudocode: function Kali (m,n) Hasil=0 for i=1 to n do Hasil=Kali+m endfor Kali=Hasil endfunction b. Implementasi dalam Bahasa C/C++ /*Program Menghitung Perkalian Dua Bilangan Bulat*/ #include<stdio.h> #include<conio.h> int kali(int x,int y); main() { int a,b,result; printf("Program menghitung Perkalian Dua Bilangan Bulat \n"); printf("Masukkan bilangan Pertama :"); scanf("%d",&a); printf("Masukkan bilangan kedua :"); scanf("%d",&b); result=kali(a,b); printf("Hasil Perkalian %d x %d = %d \n",a,b,result); getch(); } int kali(int x,int y) { int hasil,i; if(x==1) return y; else { hasil=y; for(i=1;i<x;i++) hasil=hasil+y; return(hasil); } } Tampilan Program: Program menghitung Perkalian Dua Bilangan Bulat Masukkan bilangan Pertama : 4 Masukkan bilangan kedua : 5 Hasil Perkalian 4 x 5 = 20 Pada program tersebut kita membuat sebuah fungsi dengan type data long int. Kita tidak menggunakan type data int karena type data int hanya mempunyai range data yang brkisara antara – 32.768 sampai dengan 32.767 . Hal ini dilakukan untuk mengantisipasi jika program yang kita buat digunakan untuk menghitung perkalian dua bilangan bulat yang dimungkinkan hasilnya melebihi 32.767 sedangkan type data long int range datanya berkisar antara –2.147.483.648 sampai dengan 2.147.483.647. Daftar Pustaka Ema Utami, Suwanto Raharjo, 2004, Belajar C Di GNU/Linux, ISSN 979-3289-55-4, Penerbit Graha Ilmu Yogyakarta Ema Utami, Suwanto Raharjo, 2004, Struktur Data Menggunakan C di GNU/Linux, ISSN 979-731395-6, Penerbit Andi Offset Yogyakarta Ema Utami, 2004, Logika, Algoritma dan Implementasinya dalam Bahasa Python di GNU/Linux, ISSN 979-731-443-X, Penerbit Andi Offset Yogyakarta Ema Utami, Sukrisno, 2005, 10 Langkah Mudah Memahami Logika Algoritma Menggunakan Bahasa C/C++ di GNU/Linux, ISSN 979-763-020-X, Penerbit Andi Offset Yogyakarta Ema Utami, Sukrisno, 2005, 101 Tips dan Trik Bahasa C untuk Pemula di GNU/Linux, ISSN 979763-010-2, Penerbit Andi Offset Yogyakarta Ema Utami, Sukrisno, Suwanto Raharjo, 2007, Struktur Data : Konsep dan Implementasinya dalam Bahasa C dan Free Pascal di GNU/Linux, ISSN 979-756-292-2, Penerbit Graha Ilmu Yogyakarta