Anda di halaman 1dari 17

BAB

A. Pengertian Rekursif

Proses yang bersifat Rekursif, terjadi apabila dalam suatu fungsi ada
instruksi yang mengCALL fungsi itu sendiri, atau lebih sering disebut mengcall
dirinya sendiri.

Contoh :

1. Susun algoritma untuk menginput sebuah nilai integer (misal masuk ke


variabel N ), kemudian hitung N! ( baca: N faktorial)
A. Tanpa menggunakan Fungsi

Gmbr 1.1

1
B. Menggunakan Fungsi

1) Menggunakan Fungsi non recursif

Gmbr 1.2

Gmbr 1.3

2
2) Menggunakan Fungsi yang bersifat recursif

Gmbr 1.4

Gmbr 1.5

3
Gmbr 1.7

4
Gmbr 1.8

Gmbr 1.9

5
Gmbr 2.1

Input : Jakarta

Tercetak : atrakaJ atau : a t r a k a J

Gmbr 2.2

6
Gmbr 2.3

C. Fungsi Rekursif

adalah fungsi yang dapat memanggil dirinya sendiri. Maksudnya, fungsi


tersebut menggunakan dirinya sendiri untuk proses perulangan.

Algoritma recursive adalah fungsi yang tepat yang dapat di gunakan untuk
memecahkan suatu masalah yang logis.

 Kelemahan dan Kelebihan Recursion

 Kelemahan Recursion
 Memakan memori yang lebih besar, karena setiap kali bagian
dirinya dipanggil,dibutuhkan sejumlah ruang memori
tambahan.

7
 Mengorbankan efisiensi dan kecepatan
 Problem: rekursi seringkali tidak bisa “berhenti” sehingga
memori akan terpakai habis dan program bisa hang.
 Program menjadi sulit dibaca.

 Kelebihan Recursion
 Karena program lebih singkat dan ada beberapa kasus yang
lebih mudah menggunakan fungsi yang rekursif.

D.Perbedaan antara Recursif dan Iterasi

1. Recursif
 Kode program lebih ringkas dan mudah dipahami
 Membutuhkan alokasi memori yang besar
 Tidak cocok ketika kinerja tinggi diperlukan, karena terjadi overhead
 pemanggilan fungsi dalam jumlah yang relatif besar

2. Iterasi
 Kode program lebih panjang, untuk beberapa kasus solusi iteratif lebih
sulit diterapkan
 Relatif lebih kecil alokasi memorinya
 Cocok diterapkan ketika kinerja aplikasi harus diterapkan (hanya ada satu
kali pemanggilan fungsi)

E. Definisi Recursif
Recursif adalah proses pemanggilan dirinya sendiri (fungsi atau
prosedur). Fungsi maupun prosedur yang memanggil dirinya disebut fungsi atau
prosedur rekursif. Fungsi untuk suatu bagian program yang mengembalikan
(menghasilkan) hanya satu nilai. Sebuah function call adalah suatu ekspresi jadi ia
memberikan satu nilai.Procedure adalah suatu bagian program yang melakukan

8
aksi/fungsi khusus, biasanya berdasarkan sekumpulan parameter. Sebuah
procedure call adalah suatu statemen, jadi ia melakukan aksi. Banyak obyek
dalam matematika didefinisikan dengan menampilkan suatu proses untuk
menghasilkan obyek-obyek tsb.

Misalnya : n faktorial (n!) didefinisikan sebagai produk dari semua


integer diantara n dan 1. Contoh lain adalah bilangan asli. 1 adalah bilangan
asli.Successor dari 1 adalah bilangan asli.

Perbedaan rekursi dengan prosedur/fungsi adalah rekursi bisa memanggil


kedirinya sendiri tetapi prosedur atau fungsi harus dipanggil lewat pemanggil
prosedur/fungsi. Ciri masalah yang dapat diselesaikan secara rekursif adalah
masalah tersebut dapat direduksi menjadi satu atau lebih masalah-masalah serupa
yang lebih kecil. Secara umum suatu algoritma rekursif selalu mengandung 2
macam kasus :

1. Satu atau lebih kasus yang pemecahan masalahnya dilakukan dengan


menyelesaikan masalah serupa yg lebih sederhana (menggunakan
recursive call).
2. Satu atau lebih kasus pemecahan masalahnya dilakukan tanpa recursive
call. Kasus ini disebut kasus dasar atau penyetop. Supaya tidak terjadi
rekursif tak hingga, maka setiap langkah rekursif haruslah mengarah ke
kasus penyetop.

Sistem komputer mengikuti jalannya program yang rekursif biasanya


dengan menggunakan suatu struktur data yang disebut stack. Ketika eksekusi
program sampai pada suatu rekursif call, ia menghentikan sementara komputasi
yg sedang dilaksanakannya sekarang untuk melakukan recursive call tsb, agar ia
dapat kembali ke keadaan semula setelah recursive call itu selesai , ia harus
menyimpan informasi yang cukup. Informasi yg diperlukan disebut activation
frame. Activation frame disimpan pada bagian memori yg diatur dalam benruk
stack. Rekursif yang berlapis-lapis dapat menghabiskan memori yang

9
mengakibatkan stack overflow. Masalah yg mempunyai solusi rekursif juga
mempunyai solusi iteratif(menggunakan loop). Versi iteratif seringkali lebih
efisien daripada versi rekursif karena rekursif biasanya menggunakan memori yg
lebih besar dan memerlukan waktu ekstra u/ penanganan stack of activation
frame.

 Method Recursif
1. Fibonacci

Fibonacci adalah sebuah deret yang dimulai dengan angka 0 dan 1,


dimana deret selanjutnya dalah penjumlahan dari 2 deret sebelumnya. Contohnya :
0, 1, 1, 2, 3, 5, dll.

2. Faktorial

Faktorial adalah hasil perkalian antara bilangan bulat positif yang


kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n
faktorial.

Gmbr 2.4

Implementasi dari rekursif yang paling simple biasanya digunakan untuk


menghitung faktorial dari sebuah bilangan atau menghitung bilangan fibonacci.
Berikut adalah analogi untuk mencari faktorial dari 5.

10
Gmbr 2.5

Dari contoh analogi diatas, kita dapat menarik kesimpulan :

 Fungsi rekursif selalu memiliki kondisi yang menyatakan kapan fungsi tersebut
berhenti. Kondisi ini harus dapat dibuktikan akan tercapai, karena jika tidak
tercapai maka kita tidak dapat membuktikan bahwa fungsi akan berhenti, yang
berarti algoritma kita tidak benar.
 Fungsi rekursif selalu memanggil dirinya sendiri sambil mengurangi atau
memecahkan data masukan setiap panggilannya. Hal ini penting diingat, karena
tujuan utama dari rekursif ialah memecahkan masalah dengan mengurangi
masalah tersebut menjadi masalah-masalah kecil.

11
 Rekursif

 Rekursif adalah salah satu metode dalam dunia matematika dimana


definisi sebuah fungsi mengandung fungsi itu sendiri. Dalam dunia
pemrograman, rekursi diimplementasikan dalam sebuah fungsi yang
memanggil dirinya sendiri. Istilahnya Joshua, “jeruk kok minum jeruk?”.

 Fungsi yang berisi definisi dirinya sendiri

 Fungsi yang memanggil dirinya sendiri

 Prosesnya terjadi secara berulang-ulang

 Yang perlu diperhatikan adalah “stopping role”

Contoh fungsi yang didefinisikan


secara rekursif

f(0) = 3

f(n + 1) = 2f(n) + 3

Maka

f(0) = 3

f(1) = 2f(0) + 3 = 2×3 + 3 = 9

f(2) = 2f(1) + 3 = 2×9 + 3 = 21

f(3) = 2f(2) + 3 = 2×21 + 3 = 45

f(4) = 2f(3) + 3 = 2×45 + 3 = 93

Plus – Minus

 +Karena program lebih singkat dan ada beberapa kasus yang lebih mudah
menggunakan fungsi yang rekursif

12
 -Memakan memori yang lebih besar, karena setiap kali bagian dirinya
dipanggil, dibutuhkan sejumlah ruang memori tambahan.

 -Mengorbankan efisiensi dan kecepatan

 -Problem: rekursi seringkali tidak bisa “berhenti” sehingga memori akan


terpakai habis dan program bisa hang.

 -Program menjadi sulit dibaca

 Saran: jika memang bisa diselesaikan dengan iteratif, gunakanlah iteratif!

Bentuk Umum Fungsi Rekursif

return_data_type function_name(parameter_list){

...

function_name(...);

...

Problems

 Faktorial

5! = 5 x 4 x 3 x 2 x 1

4! = 4 x 3 x 2 x 1

Berarti 5! = 5 x 4!

 Metode Iteratif

Salah satu cara untuk menghitung adalah dengan menggunakan loop, yang
mengalikan masing-masing bilangan dengan hasil sebelumnya. Penyelesaian

13
dengan cara ini dinamakan iteratif, yang mana secara umum dapat didefinisikan
sebagai berikut:

 n! = (n)(n-1)(n-2) … (1)

Metode Rekursif

Berikut fungsi matematika faktorial :

 Cara lain untuk menyelesaikan permasalahan di atas adalah dengan cara


rekursi, dimana n! adalah hasil kali dari n dengan (n-1)!.

 Untuk menyelesaikan (n-1)! adalah sama dengan n!, sehingga (n-1)!


adalah n-1 dikalikan dengan (n-2)!, dan (n-2)! adalah n-2 dikalikan dengan
(n-3)! dan seterusnya sampai dengan n = 1, kita menghentikan
penghitungan n!

Faktorial Rekursif (2)

 For n = 1, 1! = n! = n(n – 1)! = 1(1 – 1)! = 1(0)! = 1(1) = 1.

 For n = 2, 2! = n! = n(n – 1)! = 2(2 – 1)! = 2(1)! = 2(1) = 2.

 For n = 3, 3! = n! = n(n – 1)! = 3(3 – 1)! = 3(2)! = 3(2) = 6.

 For n = 4, 4! = n! = n(n – 1)! = 4(4 – 1)! = 4(3)! = 4(6) = 24.

 For n = 5, 5! = n! = n(n – 1)! = 5(5 – 1)! = 5(4)! = 5(24) = 120

14
F. Contoh Program Rekursif

#include <stdio.h>
// Fungsi rekursif untuk menghitung jumlah angka dari 1 hingga n
int jumlah(int n) {
if (n == 0) {
return 0;
} else {
return n + jumlah(n - 1);
}
}
int main() {
int n;

// Input dari pengguna


printf("Masukkan nilai n: ");
scanf("%d", &n);
// Memanggil fungsi rekursif dan menampilkan hasilnya
printf("Jumlah angka dari 1 hingga %d adalah %d\n", n, jumlah(n));
return 0;
}

Gmbr 2.6

15
KESIMPULAN

Fungsi rekursif merupakan fungsi yang memanggil dirinya sendiri. Terdapat dua

komponen penting dalam fungsi rekursif, yaitu kondisi kapan berhentinya fungsi

dan pengurangan atau pembagian data ketika fungsi memanggil dirinya sendiri.

Optimasi fungsi rekursif dapat dilakukan dengan menggunakan teknik tail call,

meskipun teknik ini tidak selalu diimplementasikan oleh semua bahasa

pemrograman. Selain sebagai fungsi, konsep rekursif juga terkadang digunakan

untuk struktur data seperti binary tree atau list.

16
Daftar pusaka

https://tekno.kompas.com/read/2023/03/07/03000057/pengertian-dan-fungsi-
rekursif-serta-contohnya

https://www.bing.com/search?
pglt=41&q=rekursif+adalah&cvid=bc7f1af08d3f4eaaa49b95454b3944b
5&g

https://www.bing.com/ck/a?!
&&p=7a6b262f88425815JmltdHM9MTcwMTEyOTYwMCZpZ3VpZD
0wODRlNWU4OC0yOTdmLTY

17

Anda mungkin juga menyukai