Fungsi Rekursif
pada tutorial sebelumnya kita sudah mencoba suatu fungsi dipanggil dalam fungsi yang lain. tapi, Apakah kita bisa menggunakan/memanggil suatu fungsi didalam fungsi itu sendiri? Yap, kita bisa melakukan hal tersebut, hal ini dinamakan fungsi rekursif. Ini berarti bahwa fungsi tersebut akan terus memanggil dirinya sendiri dan mengulangi perilakunya sampai kondisi dasar terpenuhi dan mengembalikan hasil. dimana kondisi dasar inilah yang menghentikan rekursif. salah satu kegunaan fungsi rekursif ini bisa kita gunakan untuk menentukan Faktorial.
def faktorial(x):
if x == 1:
return 1
else:
return(x * faktorial(x-1))
angka = 5
print('Faktorial dari', angka, 'adalah', faktorial(angka))
Output:
Faktorial dari 5 adalah 120
Proses dari fungsi rekursif diatas.
faktorial(5) | pemanggilan pertama |
5 * faktorial(4) | pemanggilan kedua |
5 * 4 * faktorial(3) | pemanggilan ketiga |
5 * 4 * 3 * faktorial(2) | pemanggilan keempat |
5 * 4 * 3 * 2 * faktorial(1) | pemanggilan kelima |
5 * 4 * 3 * 2 * 1 | return pemanggilan kelima |
5 * 4 * 3 * 2 | return pemanggilan keempat |
5 * 4 * 6 | return pemanggilan ketiga |
5 * 24 | return pemanggilan kedua |
120 | return pemanggilan pertama |
anda dapat melihat ilustrasi dibawah.
(source : https://www.programiz.com/python-programming/recursion )
pada contoh diatas rekursif berakhir jika x sama dengan 0 ini dinamakan kondisi dasar. setiap rekursif harus memiliki kondisi dasar yang akan menghentikan rekursif, jika tidak fungsi akan dipanggil secara terus menerus dan mengakibatkan stack overflow. untuk mengatasi ini secara default python telah membatasi rekursif sebanyak 1000 kali. bila melampaui 1000 maka akan menyebabkan recursionerror.
def rekursif():
rekursif()
rekursif()
Output:
[Previous line repeated 996 more times] RecursionError: maximum recursion depth exceeded
Kita juga dapat menggunakan fungsi rekursif untuk menghitung deret fibonacci. Deret fibonacci adalah serangkaian deret angka sederhana yang susunan angkanya merupakan penjumlahan dari dua angka sebelumnya (0,1,1,2,3,5,8,13,21,…dst).
Deret Fibonacci didefinisikan sebagai:
Fn = Fn-1 + Fn-2
dimana F0 = 0
and F1 = 1
membuat fungsi fibonacci pada python cukup mudah. berikut syntaxnya.
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
fib(7)
Output:
13
Anonymous/Lambda Function
Anonymous Function atau Lambda Function adalah fungsi yang didefinisikan tanpa nama. fungsi biasa diawali dengan def, akan tetapi lambda function diawali dengan lambda. pada dasarnya fungsi lambda memiliki perilaku yang sama dengan fungsi biasa, kita bisa memasukkan berapapun parameter akan tetapi hanya dapat memiliki satu ekspresi atau perintah dan mengembalikan nilainya. bahkan fungsi ini ditulis dalam satu baris kode saja. berikut adalah syntax lambda function.
lambda parameter : perintah/ekspresi
diawali dengan keyword lambda lalu parameter, titik dua, dan perintah. kita dapat memasukkan fungsi ini kedalam variabel agar dapat digunakan. berikut contoh fungsi lambda.
double = lambda x: x * 2
x = lambda a, b : a * b
print(double(5))
print(x(5, 6))
Output:
10 30
biasanya lambda function digunakan pada fungsi yang parameternya adalah fungsi seperti map(), dan filter() yang akan kita pelajari lebih lanjut nantinya.