MAKALAH ALGORITMA PEMROGRAMAN 
 “ REKURSIF ” 

Disusun Oleh : 1. Hery Setiawan           (2012-53-003)
                      2. Alfi Karina                  (2012-53-013)
                      3. Muhammad Syafi’udin (2012-53-023)
                      4. Teguh Prasetyo            (2012-53-033)
                      5. Muhammad Zaenuri     (2012-53-043)



UNIVERSITAS MURIA KUDUS TEKNIK SISTEM INFORMASI 2012 



 KATA PENGANTAR 
Puji dan syukur saya ucapkan kepada Allah SWT, yang mana telah memberikan saya kesempatan dan kesehatan untuk dapat menyelesaikan makalah yang berjudul “REKURSIF” ini. Makalah ini dibuat dalam rangka memperdalam wawasan tentang rekursif, yang sangat diperlukan untuk menyelesaikan masalah dan merupakan tujuan utama dalam sain computer, sehingga dengan cara cepat masalah dapat teratasi. Dalam penyelesaian makalah ini saya tidak lupa menyampaikan terima kasih yang tidak terhingga kepada kedua orang tua saya, karena mereka sudah memberikan dukungan moral maupun material. Dan saya juga tidak lupa mengucapkan terima kasih kepada Ibu Nanik Susanti, S.Kom yang telah membimbing dan mengajari kami dalam mata kuliah Algoritma Pemrograman. Saya menyadari bahwa masih banyak kekurangan dalam penyusunan makalah ini, dan saya mengharapkan kritik serta sarannya yang bersifat membangun dalam menyelesaikan tugas makalah ini menjadi yang lebih baik lagi. Terima kasih. Hormat kami, Penulis DAFTAR ISI Halaman Judul i Kata Pengantar ii Daftar Isi iii BAB I PENDAHULUAN 1.1 Latar Belakang 1 1.2 Rumusan Masalah 1 1.3 Batasan Masalah 1 BAB II LANDASAN TEORI 2.1 Konsep 2 2.1.1 Pengertian Rekursif 2 a. Fungsi Rekursif 2 b. Kelebihan Perulangan Rekursif 2 c. Kekurangan Perulangan Rekursif 2 2.2 Algoritma 3 2.3 Studi Kasus 4 2.4 Program 5 BAB III PENUTUP 3.1 Kesimpulan 6 3.2 Saran 6
 BAB I PENDAHULUAN
 1.1 Latar Belakang Seiring dengan kebutuhan masyarakat yang dipengaruhi oleh perkembangan teknologi yang begitu pesat terutama di bidang komputer, hampir semua pengolahan data maupun transaksi diberbagai perusahaan diproses menggunakan komputer baik perusahaan swasta maupun instansi pemerintah. Penerapan sistem operasi telah berubah dari sistem manual menjadi sistem komputerisasi, hal itu cukup beralasan mengingat banyaknya kelebihan dari sistem komputerisasi antara lain adalah proses pembelajaran struktur data yang membahas tentang Rekursif dalam Algoritma. Komputer adalah sistem elektronik untuk memanipulasi data yang cepat dan tepat serta dirancang dan diorganisasikan supaya secara otomatis menerima dan menyimpan data input memperoses dan menghasilkan output dibawah pengawasan instruksi-instruksi program yang tersimpan di memori. 1.2 Permasalahan Adapun permasalahan pada urutan di atas dalam penjelasan latar belakang maka saya mengidentifikasi masalah yaitu : 1. Tidak bisa melakukan nested loop atau looping bersarang 2. Proses agak berbelit-belit karena terdapat pemangilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk 1.3 Batasan Masalah Adapun batasan masalah dari makalah ini adalah mengenai pengertian tentang rekursif, algoritma dan pemrograman rekursif itu bisa dijalankan di dalam pemrograman bahasa C++.  
BAB II LANDASAN TEORI 
 1.1 KONSEP 2.1.1 Pengertian Rekursif a. Pengertian Rekursif Rekursif adalah suatu proses perulangan untuk menyelesaikan suatu permasalahan berdasarkan suatu hubungan rekurens (recurrence relation). Rekursi dapat didefinisikan sebagai suatu prosedur atau fungsi yang melakukan eksekusi dengan memanggil atau memproses subprogram yang arahnya ke prosedur atau fungsi dirinya sendiri. b. Fungsi Rekursif Fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri. Pada beberapa persoalan, fungsi rekursif sangat berguna karena mempermudah solusi. Namun demikian, fungsi rekursif juga memiliki kelemahan, yakni memungkinkan terjadinya overflow pada stack, yang berarti stack tidak lagi mampu menangani permintaan pemanggilan fungsi karena kehabisan memori (stack adalah area memori yang dipakai untuk variable lokal untuk mengalokasikan memori ketika suatu fungsi dipanggil. c. Kelebihan Perulangan Rekursif • Sangat mudah untuk melakukan perulangan dengan batasan yang luas dalam artian melakukan perulangan dalam skala yang besar • Dapat melakukan perulangan dengan batasan fungsi d. Kekurangan Perulangan Rekursif • Tidak bisa melakukan nested loop atau looping bersarang. • Biasanya membuat fungsi sulit untuk dipahami, hanya cocok untuk persoalan tertentu saja • Trace error sulit • Memerlukan stack yang lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan ditempatkan ke stack dan ada kalanya akan menyebabkan stack tak cukup lagi (Stack Overrun). • Proses agak berbelit-belit karena terdapat pemangilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk. • Memungkinkan terjadinya overflow pada stack (stack tak lagi mampu menangani permintaan pemanggilan subrutin karena kehabisan memori) 1.2 ALGORITMA Mendapatkan nilai N faktorial (N!) dengan menggunakan perintah rekursif. #include #include int factorial(int n) { if ((n==1) || (n==0)) {return (1);} else {return (n * factorial (n-1)); } } void main () { int x ; cout<<"Menghitung N Faktorial (N!)\n"; cout<<"Masukkan N : "; cin>>x; cout<<"Nilai "<
Program Rekursif C++ Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Fungsi ini 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. Contoh program rekursif: 1. Rekursif pembalik kata #include #define MAX 100 void rekursif_angka_terbalik(int); main() { int i,j,jml=0; char bil[MAX]; printf("\n======================="); printf("\n=NAMA : MAHFUZ ="); printf("\n=NIM : 100533405403="); printf("\n=KELAS : PTI '10 B ="); printf("\n======================="); printf("\n"); printf("\n^_^Program Pembalik Angka^_^"); printf("\n"); printf("\nMasukkan bilangan yang akan dibalik kawan= "); gets(bil); for (i=0;bil[i];i++) jml=jml++; printf("\n"); printf("Maka hasilnya adalah= "); for(j=jml-1;j>=0;j--) printf("%c",bil[j]); printf("\n"); } 2. Rekursif rumus bangun ruang #include #include void main() { int pilihan; float Lsegitiga,Ksegitiga,Lpersegi,Kpersegi,Lpersegipanjang,Kpersegipanjang,Llingkaran,Klingkaran,Vkubus,LPkubus,Vbalok,LPbalok,Vbola,LPbola,Vlimassegiempat,LPlimassegiempat,Vtabung,LPtabung ; float a, t, s, p, l, r, phi,sAB,sBC,sCA; char ulang; do { cout<<"(c) Created 2009 by dsuryanta.Inc"<>pilihan; switch (pilihan) { case 1 : cout<<"Menghitung Luas Segitiga"<>a; cout<<"Masukkan tinggi segitiga : ";cin>>t; cout<<"Masukkan sisi AB segitiga : ";cin>>sAB; cout<<"Masukkan sisi BC segitiga : ";cin>>sBC; cout<<"Masukkan sisi CA segitiga : ";cin>>sCA; Lsegitiga = 0.5*a*t; Ksegitiga = sAB+sBC+sCA; cout<<"Luas segitiga adalah : "<>s; Lpersegi = s*s; Kpersegi = 4*s; cout<<"Luas bujursangkar : "<>p; cout<<"Masukkan lebar : ";cin>>l; Lpersegipanjang = p*l; Kpersegipanjang = (p+l)*2; cout<<"Luas Persegipnjng: "<>r; phi = 3.14; Llingkaran = phi*r*r; Klingkaran = phi*(r+r); cout<<"Luas lingkaran adalah : "<>s; Vkubus = s*s*s; LPkubus = 6*s; cout<<"Volum kubus adalah : "<>p; cout<<"Masukkan lebar balok : ";cin>>l; cout<<"Masukkan tinggi balok : ";cin>>t; Vbalok = p*l*t; LPbalok = (2*p*l)+(2*p*t)+(2*l*t); cout<<"Volum balok adalah : "<>r; cout<<"Masukkan tinggi bola : ";cin>>t; phi = 3.14; Vbola = 4/3*phi*r*t*t*t; LPbola = 4*phi*r*r; cout<<"Volum bola adalah : "<>p; cout<<"Masukkan lebar limas segi empat : ";cin>>l; cout<<"Masukkan tinggi limas segi empat : ";cin>>t; Vlimassegiempat = (p*l*t)*1/3; LPlimassegiempat = ((p+l)*t)+(p*l); cout<<"Volum limas segi empat adalah : "<>r; cout<<"Masukkan tinggi tabung : ";cin>>t; phi = 3.14; Vtabung = phi*r*r*t; LPtabung = (2*phi*r)*(r*t); cout<<"Volum tabung adalah : "<>ulang; }while(ulang == 'y'); } 3. Rekursif segitiga siku-siku terbalik #include #include #include using namespace std; void rekursif(int argc, char *argv[]) { int t,y,x; cout << "Masukkan tinggi segitiga : "; cin >> t; cout << "----------------------------\n"; for(y=1;y<=t;y++) { cout<<" "; for(x=1;x<=y;x++) { cout << "*"; } cout << " " << endl; } cout< #include int main(){ int i,j, sudut[3]; for (i=0;i<3;i++){ printf("Sudut ke - %d : ",i+1); scanf("%d",&sudut[i]); } int sum; bool samaKaki = false; for (i=0;i<3;i++){ sum = 0; for (j=0;j<3;j++){ if (j != i) { sum += sudut[j]; } } if (sudut[i] == sum){ printf("Segitiga Sama Kaki"); samaKaki = true; } } if (! samaKaki){ printf("Bukan segitiga sama kaki"); } getch(); return 0; }