Untuk Menjawab Pertanyaan Apa itu rekursi, Saya akan menggunakan definisi yang ditulis didalam Microsoft bookshelf:
Jadi, rekursi memungkinkan untuk memanggil suatu prosedur didalam prosedur itu sendiri. Mungkin Pertanyaan bagi pembaca, "Mengapa Kita Perlu Memerlukan Rekursi?",Rekursi adalah kemampuan suatu rutin untuk me-manggil dirinya sendiri.
Jawabnya adalah karena ada beberapa kasus yang akan jauh lebih mudah diselesaikan dengan rekursi. Namun, penggunaan rekursi terkadang harus mengorbankan efisiensi dan kecepatan. Di samping itu, ada masalah yang sering muncul dalam rekursi, yaitu eksekusi yang tidak pernah berhenti (Infinite Loop).Akibatnya Memori Tumpukan akan habis dan komputer hang.
Banyak Sekali Contoh Rekursi dalam Pemrograman, seperti Faktorial, Fibonanci, Short Path dan lain sebagainya.Disini saya hanya akan menjelaskan tentang Fungsi Faktorial dalam pemrograman, di karenakan faktorial paling sering digunakan dalam rekursi. Berikut ini saya akan mendefinisikan fungsi faktorial pada bilangan bulat.
n! = n*(n-1)!,jika n > 1contoh:
n! = 1, jika n = 0, 1
4! = 4 * 3!Sekedar Tambahan, untuk menghitung faktorial dengan komputer, anda bisa menggunakan perulangan, untuk mengetahui seperti apa perulangan (loop) anda bisa cek disini, dan hasilnya lebih efisien dibandingkan dengan rekursi. Namun, disini saya tetap membahas perhitungan faktorial dengan rekursi untuk menjelaskan konsep rekursi itu sendiri.
4! = 4 * 3 * 2!
4! = 4 * 3 * 2 * 1!
4! = 4 * 3 * 2 * 1
4! = 24
Kembali pada faktorial di atas. Sesuai Definisinya, anda dapat menuliskan fungsi perhitungan faktorial seperti contoh berikut.
function Faktorial (n: byte): longint;Pada baris pertama dari fungsi di atas, nilai n di cek sama dengan 0 atau 1. jika ya, maka fungsi mengembalikan nilai 1. jika tidak, fungsi mengembalikan nilai:
begin
if (n = 0) or (n = 1) then
Faktorial := 1
else
Faktorial := n * Faktorial (n - 1);
end;
n * Faktorial(n-1);
Di sinilah letak proses rekursi itu.Perhatikan bahwa fungsi Faktorial ini memanggi dirinya sendiri tetapi dengan parameter (n - 1).