#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i; //deklarasi var i dengan tipe data int (integer)
int faktorial (int w);
printf("Wulan Kandiani Kusumah
Wardani\n\n");
printf("49013036\n\n");
printf("Masukan sembarang bilangan
bulat positif: ");//Menampilkan ekspresi dilayar
"Masukan sembarang bulangan bulat positif"
scanf("%d",&i);//untuk memasukan data lewat
keyboard
printf("\nMelalui perhitungan
rekursif, %d!=%d\n\n",faktorial
(i));//Menampilkan ekspresi
dilayar "Melalui perhitungan rekursif"
//untuk mencetak nilai dari var i
dalam bentuk faktorial (%d!) dengan cara memanggil variabel i
//var faktorial (i)
//memasukan nilai i ke fungsi
faktorial (int w)
system ("pause");
return 0;
}
int faktorial(int w)
{
if (w == 0)//untuk menyeleksi suatu kondisi
//perbandingan jika var w
samadengan nol (0)
return 1;
else
//var w mengembalikan nilai 1
return w*faktorial(w-1);
// Fungsi rekursif:
// inputan 5 dikalikan dengan
faktorial (5-1)
// inputan 4 dikalikan dengan
faktorial (4-1)
// inputan 3 dikalikan dengan
faktorial (3-1)
// inputan 2 dikalikan dengan
faktorial (2-1)
// inputan 5 dikalikan dengan
faktorial (1-1)
}DESKRIPSI SINGKAT:
Fungsi rekursif adalah fungsi yang
memanggil dirinya sendiri, baik secara langsung maupun tidak langsung.
Pemanggilan fungsi rekursif secara langsung berarti dalam fungsi tersebut
terdapat perintah untuk memanggil dirinya sendiri sedangkan secara tidak
langsung berarti fungsi rekursif memanggil 1 atau lebih fungsi lain sebelum
memanggil dirinya sendiri.
Fungsi Rekursif akan terus
berjalan sampai kondisi berhenti terpenuhi, oleh karena itu dalam sebuah fungsi
rekursif perlu terdapat 2 blok penting, yaitu blok yang menjadi titik berhenti
dari sebuah proses rekursi dan blok yang memanggil dirinya sendiri. Fungsi
rekursif tidak selalu lebih jelek daripada iteratif. Ada kalanya sebuah fungsi
rekursif justru mempermudah penyelesaian masalah yang ditemui pada kasus
iteratif (pengulangan)
Meskipun penulisan dengan fungsi rekursif lebih singkat dari fungsi
iteratif, tapi fungsi rekursif memiliki kelemahan, yaitu memerlukan memori yang
lebih banyak, karena perlu tambahan untuk ‘Activation Record Stack’. Dengan
demikian waktu proses lebih lama, karena perlu menjejaki setiap pemanggilan
rekursif melalui ‘Activation Record’. Karena setiap pemanggilan fungsi,
register dan memory harus di push ke stack maka setelah selesai pemanggilan
perlu diadakannya pop stack. untuk mengembalikan memory dan register kembali ke
keadaan awal, ini sering disebut sebagai overhead.
/*1. Pada fungsi ini "faktorial(int
w)" dengan parameter "w" nilainya diisikan variable "w"
dan nilai dari variable "w" didapatkan dari inputan user, misal w=6.
2. Dalam blok fungsi faktorial
saat dijalankan, maka akan terdapat kondisi pengecekkan, jika w==0 maka, fungsi
Faktorial, akan langsung di hentikan,
jika tidak, maka akan mengembalikan nilai, w*Faktorial(w-1).
3. Alur dari return "w* faktorial(w-1)":
// Fungsi
rekursif:
// inputan 5 dikalikan dengan
faktorial (5-1)
// inputan 4 dikalikan dengan
faktorial (4-1)
// inputan 3 dikalikan dengan
faktorial (3-1)
// inputan 2 dikalikan dengan
faktorial (2-1)
// inputan 1 dikalikan dengan
faktorial (1-1)
*/
Tidak ada komentar:
Posting Komentar