-->

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

  1. Modifikasilah fungsi cetak() pada program 7.1 sehingga outputnya (contoh):
    0
    1
    2
    3
  2. Buatlah program yang berisi fungsi rekursif untuk konversi bilangan desimal ke biner.
Load Comments

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel