Algoritma & Pemrograman #9 - Rekursi
Penjelasan
Bab ini membahas tentang tentang fungsi rekursif yang dapat digunakan sebagai solusi sederhana terhadap permasalahan yang sulit untuk diselesaikan secara iteratif menggunakan struktur for, while, maupun do while.Sebuah fungsi memiliki sifat rekursif bila didalamnya terdapat pemanggilan terhadap dirinya sendiri. Di dalam fungsi harus terdapat satu atau lebih kondisi yang digunakan untuk menghentikan proses rekursi tersebut.
Percobaan
Program1.c
Cetak bilangan/*
Program Cetak
menampilkan sejumlah bilangan secara rekursif
*/
#include <stdio.h>
void cetak(int n);
main(void){
cetak(5);
}
/*
fungsi cetak()
tipe kembalian : Void
parameter :
n : int
n sebagai jumlah bilangan
*/
void cetak(int n){
if(n >= 0) { //syarat rekursi, n >= 0,
printf("%d\n", n); // mencetak n
cetak(n-1); // rekursi
}
}
Program2.c
Jumlah/*
Program Jumlah
menghitung pejumlahan n buah bilangn yang pertama secara rekursif
*/
#include <stdio.h>
int jumlah(int x);
int main(void) {
int n;
printf("n : ");
scanf("%d", &n);
printf("%d", jumlah(n));
return 0;
}
/*
fungsi jumlah()
tipe kembalian : int
parameter :
x : int
x sebagai suku bilangan
*/
int jumlah(int x){
if(x == 0) //syarat rekursi berhenti
return 0;
else
return x + jumlah(x - 1); // rekursi
}
Program3.c
Piramid/*
Program Piramid.c
fungsi untuk menggambar piramid secara rekursif
*/
#include <stdio.h>
void piramid(int t);
int main(void) {
int tinggi;
printf("Tinggi Piramid : ");
scanf("%d", &tinggi);
piramid(tinggi);
return 0;
}
/*
Fungsi piramid()
tipe kembalian : int
parameter :
t : int
t sebagai tinggi
*/
void piramid(int t) {
int i;
if(t >= 1) { // syarat rekursi, t >= 1
for(i = 1; i <= t; i++) // menggambar karakter *
printf("*");
printf("\n");
piramid(t - 1); // rekursi
}
}
Program4.c
Faktorial/*
Program faktorial
demo fungsi faktorial secara rekursif
*/
#include <stdio.h>
int faktorial (int n);
int main(void) {
int n;
printf("Masukkan Bilangan : ");
scanf("%d", &n);
printf("Faktorial %d! = %d", n, faktorial(n));
return 0;
}
/*
deklarasi fungsi faktorial()
tipe kembalian : int
parameter :
n : int
n sebagai bilangan yang dihitung
*/
int faktorial(int n) {
// bila n bernilai < 2 maka
if(n < 2) {
// fungsi mengembalikan nilai 1
// sekaligus sebagi batas rekursi akan berhenti
return 1;
} else {
// proses rekursi
// disini terjadi pemanggilan dirinya sendiri
// faktorial (n) = n * faktorial(n - 1);
return n * faktorial(n - 1);
}
}
Program5.c
Fibonacci/*
Program fibonacci
mengitung deret fibonaci secara rekursif
*/
#include <stdio.h>
int fibonacci(int n);
int main(void) {
int n;
printf("Masukkan suku : ");
scanf("%d", &n);
printf("Bilangan fibonacci ke-%d adalah %d", n, fibonacci(n));
return 0;
}
/*
fungsi fibonacci()
tipe kembalian : int
parameter
n : int
n sebagai suku bilangan
*/
int fibonacci(int n) {
if(n <= 2) //syarat rekursi, n <= 2
return 1;
else
return fibonacci(n-2) + fibonacci(n-1); // rekursi
}
Latihan
- Modifikasilah fungsi cetak() pada program 7.1 sehingga outputnya (contoh):
0
1
2
3 - Buatlah program yang berisi fungsi rekursif untuk konversi bilangan desimal ke biner.