Modul 3: Fungsi dan Rekursi Python - Algoritma-dan-Pemrograman-ITS/DasarPemrograman GitHub Wiki

Daftar Isi


Fungsi

Pengenalan Fungsi

Fungsi adalah sebuah kumpulan statement untuk melakukan tugas spesifik, yang bisa membutuhkan input ataupun tidak, untuk menghasilkan output yang sesuai.

Secara umum, fungsi dibedakan menjadi tiga, yakni fungsi built-in, fungsi dari library standar, dan fungsi yang dibuat pengguna. Fungsi built-in adalah fungsi bawaan yang langsung tersedia dalam Python tanpa perlu mengimpor library tambahan, misalnya fungsi print(), input(), len(), dan type(). Fungsi dari library standar adalah fungsi yang disediakan oleh modul atau library standar Python, yang perlu diimpor sebelum digunakan, misalnya fungsi math.sqrt() dari modul math, atau datetime.datetime.now() dari modul datetime. Sedangkan fungsi yang dibuat oleh pengguna (user-defined) adalah fungsi yang sengaja dibuat oleh pengguna untuk memenuhi keperluan spesifik dalam pembuatan program.

Tujuan Fungsi

Tujuan dibuatnya fungsi secara umum adalah untuk membuat program menjadi lebih modular. Fungsi digunakan ketika ingin menjalankan serangkaian perintah secara berulang kali, terkadang dengan input yang berbeda, dengan tujuan tidak mengulang penulisan kode berkali-kali, serta apabila nantinya program mengalami bug akan mempermudah proses perbaikan.

Pendefinisian Fungsi

Sebelum fungsi dapat digunakan dan bisa dipanggil, perlu dilakukan pendefinisan terlebih dahulu. Pendefinisian ditujukan untuk mendefinisikan apa yang fungsi tersebut lakukan ketika fungsi tersebut dipanggil.

Berikut adalah sintaks untuk melakukan pendefinisan fungsi:

def nama_fungsi(parameter1, parameter2, ...):
    statement
    statement
    ...
    ...
    ...

Berikut adalah contoh fungsi untuk mencetak string "Aku Sebuah Fungsi.":

def cetak():
    print("Aku Sebuah Fungsi")

cetak()

Parameter Fungsi

Parameter pada fungsi bersifat layaknya input yang diberikan kepada sebuah fungsi. Jumlah parameter pada sebuah fungsi bisa dibuat sebanyak-banyaknya sesuai kebutuhan.

Penulisan parameter fungsi sama dengan pendefinisian variabel dan tiap parameter dipisahkan oleh tanda koma ,.

def nama_fungsi(parameter1, parameter2, ...):
    # statement

Contoh:

def cetak(str):
    print(str)
 
def jumlah(a, b):
    hasil = a + b
    print(hasil)

Kita juga bisa menggunakan nilai default pada parameter.

def kali(a, b=1):
    hasil = a * b
    print(hasil)

Pemanggilan Fungsi

Untuk memanggil fungsi, dilakukan dengan menulis nama fungsinya diikuti dengan tanda (). Apabila fungsi tersebut memiliki parameter maka di dalam tanda () dituliskan nilai/variabel/objek untuk dijadikan argumen dan dipisahkan tiap argumen dengan tanda koma ,. Argumen-argumen yang dimasukkan harus sesuai dengan tipe data parameter fungsinya.

Contoh pemanggilan fungsi:

cetak("Halo, dunia")
jumlah(2, 5)
kali(5)

Nilai return Fungsi

Jika kita menginginkan fungsi yang kita jalankan menghasilkan sebuah nilai atau sederhananya menghasilkan sebuah output, kita bisa menambahkan keyword return dan mendefinisikan return type dari fungsi tersebut. Fungsi yang memiliki return type bukan None pasti memiliki return value. Nilai yang dikembalikan oleh fungsi tersebut memiliki tipe data yang bersesuaian dengan return type-nya.

Saat menemui statement return pada fungsi, maka fungsi tersebut akan berhenti dari titik dimana return tersebut terdapat, kemudian kembali ke bagian kode yang memanggil fungsi tersebut.

Misal kita ingin mendapatkan hasil dari penjumlahan dua bilangan menggunakan fungsi bernama jumlah().

def jumlah(a, b):
    hasil = a + b
    return hasil

x = 2
y = 3
hasil = jumlah(x, y)
print(hasil)

Fungsi Rekursif

Pengenalan Rekursi

Rekursi merujuk kepada definisi suatu hal yang dilakukan secara berulang-ulang.

image

Gambar di atas adalah salah satu representasi dari definisi rekursi. Dalam dunia pemrograman, istilah rekursi digunakan untuk menggambarkan fungsi yang bersifat rekursif.

Fungsi yang bersifat rekursif adalah fungsi yang memanggil dirinya sendiri di dalam fungsi tersebut. Perhatikan contoh program di bawah ini:

def rekursi(n):
    print(n)
    rekursi(n + 1)  # memanggil dirinya sendiri

rekursi(1)

Fungsi rekursi() merupakan fungsi yang bersifat rekursif karena di dalamnya memanggil fungsi rekursi() itu sendiri.

Recursive Case dan Base Case

Program sebelumnya akan terus mencetak tanpa henti karena fungsi tersebut tidak tahu kapan dirinya harus berhenti memanggil dirinya sendiri. Oleh karena itu, kita perlu base case pada sebuah fungsi rekursif.

Base Case adalah sebuah kasus atau kondisi yang kita berikan kepada sebuah fungsi rekursif untuk berhenti memanggil dirinya lagi atau disebut juga terminating condition.

Recursive Case adalah kasus di mana sebuah fungsi diharuskan untuk memanggil dirinya sendiri, dalam kata lain sebuah fungsi tersebut belum mencapai base case-nya.

Kita ambil contoh fungsi rekursif untuk memangkatkan suatu bilangan bulat. Didefinisikan perpangkatan sebuah bilangan a pangkat m sebagai power(a, m), berarti dapat dituliskan:

$$\text{power}(a, m) = a \times a \times a \times \cdots \text{(m-kali)}$$

Atau dapat didefinisikan sebagai fungsi rekursif:

$$\text{power}(a, m) = a \times \text{power}(a, m-1)$$

Dengan base case-nya adalah:

$$\text{power}(a, 0) = 1$$

Dapat diperhatikan bahwa base case dari fungsi power(a, m) adalah ketika power(a, 0) yang menghasilkan 1. Ketika sudah mencapai base case, maka tidak perlu melakukan pemanggilan fungsi itu lagi.

def power(a, m):
    if m == 0:
        return 1  # base case
    return a * power(a, m - 1)  # recursive case

print(power(2, 3))

Dalam contoh di atas, fungsi power(a, m) akan terus memanggil dirinya sendiri dengan nilai m yang berkurang satu setiap kali hingga mencapai base case di mana m sama dengan 0.

Soal Latihan

Soal 1

Buatlah program yang mengimplementasikan fungsi rekursif untuk menentukan nilai dari N! (N faktorial).

Contoh Input

5

Contoh Output

120

Soal 2

Diberikan sebuah baris bilangan 1, 5, 14, 30, ... dst. Buatlah sebuah program yang mengimplementasikan fungsi rekursif untuk menentukan bilangan ke-n dari pola tersebut.

Contoh Input

2

Contoh Output

5

Soal 3

Buatlah program yang mengimplementasikan fungsi untuk menentukan bilangan terbesar dan terkecil dari array A dengan N bilangan.

Contoh Input

5
1 2 3 4 5

Contoh Output

max: 5
min: 1