SlideShare a Scribd company logo
Fariz Darari
fariz@cs.ui.ac.id
to understand recursion you must first understand recursion
Binary Search Tree
Nilai-nilai pada subtree kiri selalu lebih kecil daripada root,
dan nilai-nilai pada subtree kanan selalu lebih besar daripada root
root
subtree kiri subtree kanan
Binary Search Tree
Berawal dari root (27), cari nilai 27 pada tree!
Binary Search Tree
Berawal dari root (27), cari nilai 19 pada tree!
Binary Search Tree
Berawal dari root (27), cari nilai 33 pada tree!
Binary Search Tree: Ide Pencarian
Cari mulai dari root, ada tiga kasus:
BASE CASE
1. Apabila nilai yang dicari == root,
maka "Ditemukan :)"
RECURSION CASES
2. Apabila nilai yang dicari < root,
maka lakukan pencarian di subtree kiri!*
3. Apabila nilai yang dicari > root,
maka lakukan pencarian di subtree kanan!*
* Apabila tidak ada subtree kiri atau kanan,
maka "Tidak ditemukan :("
Binary Search Tree: Ide Pencarian
Cari mulai dari root, ada tiga kasus:
BASE CASE
1. Apabila nilai yang dicari == root,
maka "Ditemukan :)"
RECURSION CASES
2. Apabila nilai yang dicari < root,
maka lakukan pencarian di subtree kiri!*
3. Apabila nilai yang dicari > root,
maka lakukan pencarian di subtree kanan!*
* Apabila tidak ada subtree kiri atau kanan,
maka "Tidak ditemukan :("
Cari nilai 27!
Binary Search Tree: Ide Pencarian
Cari mulai dari root, ada tiga kasus:
BASE CASE
1. Apabila nilai yang dicari == root,
maka "Ditemukan :)"
RECURSION CASES
2. Apabila nilai yang dicari < root,
maka lakukan pencarian di subtree kiri!*
3. Apabila nilai yang dicari > root,
maka lakukan pencarian di subtree kanan!*
* Apabila tidak ada subtree kiri atau kanan,
maka "Tidak ditemukan :("
Cari nilai 19!
Binary Search Tree: Ide Pencarian
Cari mulai dari root, ada tiga kasus:
BASE CASE
1. Apabila nilai yang dicari == root,
maka "Ditemukan :)"
RECURSION CASES
2. Apabila nilai yang dicari < root,
maka lakukan pencarian di subtree kiri!*
3. Apabila nilai yang dicari > root,
maka lakukan pencarian di subtree kanan!*
* Apabila tidak ada subtree kiri atau kanan,
maka "Tidak ditemukan :("
Cari nilai 33!
Binary Search Tree: Pencarian dalam Pencarian
Cari mulai dari root, ada tiga kasus:
BASE CASE
1. Apabila nilai yang dicari == root,
maka "Ditemukan :)"
RECURSION CASES
2. Apabila nilai yang dicari < root,
maka lakukan pencarian di subtree kiri!*
3. Apabila nilai yang dicari > root,
maka lakukan pencarian di subtree kanan!*
* Apabila tidak ada subtree kiri atau kanan,
maka "Tidak ditemukan :("
Jadi apa itu rekursi?
Jadi apa itu rekursi?
WIKIPEDIA
A function where the solution to a problem depends on
solutions to smaller instances of the same problem
INTRODUCTION TO PROGRAMMING BOOK
A function that calls itself
Faktorial
Secara matematis, fungsi faktorial dapat didefinisikan:
n! = n x (n – 1) x (n – 2) x . . . . . . x 2 x 1
Contoh:
5! = 5 x 4 x 3 x 2 x 1 = 120
Faktorial
Secara rekursif, fungsi faktorial dapat didefinisikan:*
n! = n x (n – 1)!
Contoh:
5! = 5 x 4!
* where 0! = 1 and 1! = 1
Faktorial dalam Python
def faktorial(num): # header fungsi faktorial
# 0! atau 1! mengembalikan 1
if (num == 0) or (num == 1):
return 1
Faktorial dalam Python
def faktorial(num): # header fungsi faktorial
# 0! atau 1! mengembalikan 1
if (num == 0) or (num == 1):
return 1
# untuk num > 1, gunakan rekursi
return num * faktorial(num-1)
Faktorial dalam Python
def faktorial(num): # header fungsi faktorial
# BASE CASE: 0! atau 1! mengembalikan 1
if (num == 0) or (num == 1):
return 1
# RECURSION CASE: untuk num > 1, gunakan rekursi
return num * faktorial(num-1)
Faktorial dalam Python: 3!
Calling trace:
faktorial(3) -> 3 * faktorial(2) -> 2 * faktorial(1) -> 1
faktorial(3)
Python call stack
faktorial(3)
Python call stack
faktorial(2)
faktorial(3)
Python call stack
faktorial(2)
faktorial(1)
Faktorial dalam Python: 3!
Return trace:
1 -> 2 * 1 -> 3 * 2 -> 6
faktorial(3)
Python call stack
faktorial(2)
1
faktorial(3)
Python call stack
2
Python call stack
6
Komponen Utama Rekursi
def faktorial(num):
# BASE CASE
if (num == 0) or (num == 1):
return 1
# RECURSION CASE
return num * faktorial(num-1)
• Base case
Titik dimana rekursi stop
• Recursion case
Titik dimana rekursi dilakukan,
tapi untuk masalah yang lebih kecil
Faktorial dalam Python (Debug Mode)
def faktorial(num): # header fungsi faktorial
print("Menghitung faktorial dari", num)
# BASE CASE: 0! atau 1! mengembalikan 1
if (num == 0) or (num == 1):
print("Faktorial dari {} adalah {}".format(num, 1))
return 1
# RECURSION CASE: untuk num > 1, gunakan rekursi
nilai_faktorial = num * faktorial(num-1)
print("Faktorial dari {} adalah {}".format(num, nilai_faktorial))
return nilai_faktorial
Misteri (asumsi num > 0)
def misteri(num):
if num == 1:
return 1
return num + misteri(num-1)
Pemangkatan dengan Angka Nonnegatif
Pemangkatan dengan Angka Nonnegatif
def pangkat(num, n):
# base case: num pangkat 0 hasilnya 1
if n == 0:
return 1
# recursion case
return num * pangkat(num, n-1)
Buat fungsi iteratif* untuk mencari nilai maksimum
dari suatu list (asumsi listnya tidak kosong)
* Tanpa rekursi, seperti yang telah kita pelajari di bab-bab sebelumnya
Buat fungsi iteratif* untuk mencari nilai maksimum
dari suatu list (asumsi listnya tidak kosong)
def maksimum_iter(lst):
max_temp = lst[0]
for i in range(1,len(lst)):
if lst[i] > max_temp:
max_temp = lst[i]
return max_temp
* Tanpa rekursi, seperti yang telah kita pelajari di bab-bab sebelumnya
Buat fungsi rekursif untuk mencari nilai maksimum
dari suatu list (asumsi listnya tidak kosong)
Buat fungsi rekursif untuk mencari nilai maksimum
dari suatu list (asumsi listnya tidak kosong)
def maksimum_rek(lst):
# base case
if len(lst) == 1:
return lst[0]
# recursion case
max_sisa = maksimum_rek(lst[1:])
if max_sisa > lst[0]:
return max_sisa
else:
return lst[0]
Mencari nilai maksimum dari suatu list
(asumsi listnya tidak kosong)
def maksimum_rek(lst):
# base case
if len(lst) == 1:
return lst[0]
# recursion case
max_sisa = maksimum_rek(lst[1:])
if max_sisa > lst[0]:
return max_sisa
else:
return lst[0]
PENDEKATAN
REKURSIF
def maksimum_iter(lst):
max_temp = lst[0]
for i in range(1,len(lst)):
if lst[i] > max_temp:
max_temp = lst[i]
return max_temp
PENDEKATAN
ITERATIF
Buat fungsi rekursif untuk mencari suatu nilai dari
nested list (list dalam list dalam list ...)
Contoh:
is_in(5, [])
>>> False
is_in(5, [1,2,3,4,5])
>>> True
is_in(5, [1,2,3,4])
>>> False
is_in(5, [1,2,3,4,[5,6]])
>>> True
is_in(5, [1,2,[3,4,[5,6]]])
>>> True
is_in(5, [1,2,[3,4,[6]]])
>>> False
Buat fungsi rekursif untuk mencari suatu nilai dari
nested list
def is_in(val, lst):
if type(lst) != list: # base case
if val == lst:
return True
else:
return False
else:
if len(lst) == 0: # base case
return False
return is_in(val,lst[0]) or is_in(val,lst[1:]) # recursion
Buat fungsi rekursif untuk menghitung total nilai
dalam list (list tidak nested, list tidak kosong)
Buat fungsi rekursif untuk menghitung total nilai
dalam list (list tidak nested, list tidak kosong)
def sum(lst):
if len(lst)==1:
return lst[0]
else:
return lst[0] + sum(lst[1:])
Buat fungsi rekursif untuk cek palindrom pada string
Buat fungsi rekursif untuk cek palindrom pada string
def palindrom(a_str):
if len(a_str)==0:
return True
elif len(a_str)==1:
return True
else:
if a_str[0]==a_str[-1]:
return palindrom(a_str[1:-1])
else:
return False
Saling rekursi: Genap atau ganjil?
(Untuk integer >= 0)
Suatu bilangan n adalah genap apabila n-1 adalah ganjil.
dan
Suatu bilangan n adalah ganjil apabila n-1 adalah genap.
Saling rekursi: Genap atau ganjil?
def is_even(n):
def is_odd(n):
Saling rekursi: Genap atau ganjil?
def is_even(n):
if n == 0:
return True
else:
return is_odd(n-1)
def is_odd(n):
if n == 0:
return False
else:
return is_even(n-1)
Pesan untuk Dibungkus
• Fungsi rekursi = memanggil dirinya sendiri
• Butuh base case, kalau tidak ya rekursinya tidak habis-habis
• Untuk recursion case, pastikan masalah menjadi lebih sederhana
Credits (Images, Icons, etc)
• https://prateekvjoshi.com/2013/10/05/understanding-recursion-
part-i/
• https://www.tutorialspoint.com/data_structures_algorithms/binary_
search_tree.htm
• https://www.petanikode.com/fungsi-rekursif/
Credits (Teaching Knowledge)
• https://en.wikipedia.org/wiki/Recursion_(computer_science)
• https://introcs.cs.princeton.edu/java/home/
• All other sources that I probably forgot to mention

More Related Content

PDF
4.1 Operasi Dasar Singly Linked List 1 (primitive list)
PDF
Basic statistics 5 - binomial distribution
PDF
Aljabar boolean(1)
PPS
Bab 5. Aplikasi Turunan ( Kalkulus 1 )
PPT
relasi himpunan
DOCX
Tugas mandiri struktur data
DOCX
Menyederhanakan fungsi boolean dengan menggunakan metode quin1
PPT
3.metode dua fase
4.1 Operasi Dasar Singly Linked List 1 (primitive list)
Basic statistics 5 - binomial distribution
Aljabar boolean(1)
Bab 5. Aplikasi Turunan ( Kalkulus 1 )
relasi himpunan
Tugas mandiri struktur data
Menyederhanakan fungsi boolean dengan menggunakan metode quin1
3.metode dua fase

What's hot (20)

DOCX
Peubah acak diskrit dan kontinu
PPTX
Bab 5 penyederhanaan fungsi boolean
PPTX
Array searching sorting_pert_11,12,13,14,15
PDF
Bab 2 logika predikat ta 2019
PPTX
Metode stepping stone
DOC
Contoh soal Metode Simpleks
PPTX
Ruang Vektor ( Aljabar Linear Elementer )
PPT
Modul 4 representasi pengetahuan
PDF
Teori bahasa-dan-otomata
DOCX
Himpunan matematika diskrit
PPTX
Fungsi linear
PPT
Pertemuan 10
PPTX
PPTX
Pertemuan 3 turunan dan aturan rantai
PDF
Metode transportasi
PPT
linear programming metode simplex
PPS
Bab 2 Fungsi ( Kalkulus 1 )
PPTX
Simpleks maksimum
PDF
Matematika Diskrit - 06 relasi dan fungsi - 06
Peubah acak diskrit dan kontinu
Bab 5 penyederhanaan fungsi boolean
Array searching sorting_pert_11,12,13,14,15
Bab 2 logika predikat ta 2019
Metode stepping stone
Contoh soal Metode Simpleks
Ruang Vektor ( Aljabar Linear Elementer )
Modul 4 representasi pengetahuan
Teori bahasa-dan-otomata
Himpunan matematika diskrit
Fungsi linear
Pertemuan 10
Pertemuan 3 turunan dan aturan rantai
Metode transportasi
linear programming metode simplex
Bab 2 Fungsi ( Kalkulus 1 )
Simpleks maksimum
Matematika Diskrit - 06 relasi dan fungsi - 06
Ad

Similar to Recursion in Python (18)

PPTX
Python 101: Recursion
PPTX
13_Rekursif.pptx
DOCX
MAKALAH REKRUSIF (DIKI CANDRA).docx
PPTX
09 pd fungsi rekursif
DOC
Dasar Pemrograman materi kuliah
PPT
Bab 8 rekursif
PPTX
8 Rekursif
PDF
Matematika Diskrit - 05 rekursi dan relasi rekurens - 01
PPT
Tistrukdat9
PPTX
Materi Rekrusif dengan Python PPTX (materi kuliah)
PDF
6 rekursif induksi matematik.pdf
PDF
Pertemuan 6 Rekursif
PPTX
Rekursi dan relasi rekurens
PPTX
Subrutin_Fungsi.pptx
PPTX
Presentation
DOCX
Fungsi Rekursif
PDF
Pertemuan 6 Rekursif
PDF
Materi Algortma dan Pemrograman - Rekursif.pdf
Python 101: Recursion
13_Rekursif.pptx
MAKALAH REKRUSIF (DIKI CANDRA).docx
09 pd fungsi rekursif
Dasar Pemrograman materi kuliah
Bab 8 rekursif
8 Rekursif
Matematika Diskrit - 05 rekursi dan relasi rekurens - 01
Tistrukdat9
Materi Rekrusif dengan Python PPTX (materi kuliah)
6 rekursif induksi matematik.pdf
Pertemuan 6 Rekursif
Rekursi dan relasi rekurens
Subrutin_Fungsi.pptx
Presentation
Fungsi Rekursif
Pertemuan 6 Rekursif
Materi Algortma dan Pemrograman - Rekursif.pdf
Ad

More from Fariz Darari (20)

PDF
Data X Museum - Hari Museum Internasional 2022 - WMID
PDF
[PUBLIC] quiz-01-midterm-solutions.pdf
PPTX
Free AI Kit - Game Theory
PPTX
Neural Networks and Deep Learning: An Intro
PPTX
NLP guest lecture: How to get text to confess what knowledge it has
PPTX
Supply and Demand - AI Talents
PPTX
Basic Python Programming: Part 01 and Part 02
PPTX
AI in education done properly
PPTX
Artificial Neural Networks: Pointers
PPTX
Open Tridharma at ICACSIS 2019
PDF
Defense Slides of Avicenna Wisesa - PROWD
PPTX
Seminar Laporan Aktualisasi - Tridharma Terbuka - Fariz Darari
PPTX
Foundations of Programming - Java OOP
PDF
[ISWC 2013] Completeness statements about RDF data sources and their use for ...
PPTX
Testing in Python: doctest and unittest (Updated)
PPTX
Testing in Python: doctest and unittest
PPTX
Dissertation Defense - Managing and Consuming Completeness Information for RD...
PPTX
Research Writing - 2018.07.18
PPTX
KOI - Knowledge Of Incidents - SemEval 2018
PPTX
Comparing Index Structures for Completeness Reasoning
Data X Museum - Hari Museum Internasional 2022 - WMID
[PUBLIC] quiz-01-midterm-solutions.pdf
Free AI Kit - Game Theory
Neural Networks and Deep Learning: An Intro
NLP guest lecture: How to get text to confess what knowledge it has
Supply and Demand - AI Talents
Basic Python Programming: Part 01 and Part 02
AI in education done properly
Artificial Neural Networks: Pointers
Open Tridharma at ICACSIS 2019
Defense Slides of Avicenna Wisesa - PROWD
Seminar Laporan Aktualisasi - Tridharma Terbuka - Fariz Darari
Foundations of Programming - Java OOP
[ISWC 2013] Completeness statements about RDF data sources and their use for ...
Testing in Python: doctest and unittest (Updated)
Testing in Python: doctest and unittest
Dissertation Defense - Managing and Consuming Completeness Information for RD...
Research Writing - 2018.07.18
KOI - Knowledge Of Incidents - SemEval 2018
Comparing Index Structures for Completeness Reasoning

Recursion in Python

  • 2. to understand recursion you must first understand recursion
  • 3. Binary Search Tree Nilai-nilai pada subtree kiri selalu lebih kecil daripada root, dan nilai-nilai pada subtree kanan selalu lebih besar daripada root root subtree kiri subtree kanan
  • 4. Binary Search Tree Berawal dari root (27), cari nilai 27 pada tree!
  • 5. Binary Search Tree Berawal dari root (27), cari nilai 19 pada tree!
  • 6. Binary Search Tree Berawal dari root (27), cari nilai 33 pada tree!
  • 7. Binary Search Tree: Ide Pencarian Cari mulai dari root, ada tiga kasus: BASE CASE 1. Apabila nilai yang dicari == root, maka "Ditemukan :)" RECURSION CASES 2. Apabila nilai yang dicari < root, maka lakukan pencarian di subtree kiri!* 3. Apabila nilai yang dicari > root, maka lakukan pencarian di subtree kanan!* * Apabila tidak ada subtree kiri atau kanan, maka "Tidak ditemukan :("
  • 8. Binary Search Tree: Ide Pencarian Cari mulai dari root, ada tiga kasus: BASE CASE 1. Apabila nilai yang dicari == root, maka "Ditemukan :)" RECURSION CASES 2. Apabila nilai yang dicari < root, maka lakukan pencarian di subtree kiri!* 3. Apabila nilai yang dicari > root, maka lakukan pencarian di subtree kanan!* * Apabila tidak ada subtree kiri atau kanan, maka "Tidak ditemukan :(" Cari nilai 27!
  • 9. Binary Search Tree: Ide Pencarian Cari mulai dari root, ada tiga kasus: BASE CASE 1. Apabila nilai yang dicari == root, maka "Ditemukan :)" RECURSION CASES 2. Apabila nilai yang dicari < root, maka lakukan pencarian di subtree kiri!* 3. Apabila nilai yang dicari > root, maka lakukan pencarian di subtree kanan!* * Apabila tidak ada subtree kiri atau kanan, maka "Tidak ditemukan :(" Cari nilai 19!
  • 10. Binary Search Tree: Ide Pencarian Cari mulai dari root, ada tiga kasus: BASE CASE 1. Apabila nilai yang dicari == root, maka "Ditemukan :)" RECURSION CASES 2. Apabila nilai yang dicari < root, maka lakukan pencarian di subtree kiri!* 3. Apabila nilai yang dicari > root, maka lakukan pencarian di subtree kanan!* * Apabila tidak ada subtree kiri atau kanan, maka "Tidak ditemukan :(" Cari nilai 33!
  • 11. Binary Search Tree: Pencarian dalam Pencarian Cari mulai dari root, ada tiga kasus: BASE CASE 1. Apabila nilai yang dicari == root, maka "Ditemukan :)" RECURSION CASES 2. Apabila nilai yang dicari < root, maka lakukan pencarian di subtree kiri!* 3. Apabila nilai yang dicari > root, maka lakukan pencarian di subtree kanan!* * Apabila tidak ada subtree kiri atau kanan, maka "Tidak ditemukan :("
  • 12. Jadi apa itu rekursi?
  • 13. Jadi apa itu rekursi? WIKIPEDIA A function where the solution to a problem depends on solutions to smaller instances of the same problem INTRODUCTION TO PROGRAMMING BOOK A function that calls itself
  • 14. Faktorial Secara matematis, fungsi faktorial dapat didefinisikan: n! = n x (n – 1) x (n – 2) x . . . . . . x 2 x 1 Contoh: 5! = 5 x 4 x 3 x 2 x 1 = 120
  • 15. Faktorial Secara rekursif, fungsi faktorial dapat didefinisikan:* n! = n x (n – 1)! Contoh: 5! = 5 x 4! * where 0! = 1 and 1! = 1
  • 16. Faktorial dalam Python def faktorial(num): # header fungsi faktorial # 0! atau 1! mengembalikan 1 if (num == 0) or (num == 1): return 1
  • 17. Faktorial dalam Python def faktorial(num): # header fungsi faktorial # 0! atau 1! mengembalikan 1 if (num == 0) or (num == 1): return 1 # untuk num > 1, gunakan rekursi return num * faktorial(num-1)
  • 18. Faktorial dalam Python def faktorial(num): # header fungsi faktorial # BASE CASE: 0! atau 1! mengembalikan 1 if (num == 0) or (num == 1): return 1 # RECURSION CASE: untuk num > 1, gunakan rekursi return num * faktorial(num-1)
  • 19. Faktorial dalam Python: 3! Calling trace: faktorial(3) -> 3 * faktorial(2) -> 2 * faktorial(1) -> 1 faktorial(3) Python call stack faktorial(3) Python call stack faktorial(2) faktorial(3) Python call stack faktorial(2) faktorial(1)
  • 20. Faktorial dalam Python: 3! Return trace: 1 -> 2 * 1 -> 3 * 2 -> 6 faktorial(3) Python call stack faktorial(2) 1 faktorial(3) Python call stack 2 Python call stack 6
  • 21. Komponen Utama Rekursi def faktorial(num): # BASE CASE if (num == 0) or (num == 1): return 1 # RECURSION CASE return num * faktorial(num-1) • Base case Titik dimana rekursi stop • Recursion case Titik dimana rekursi dilakukan, tapi untuk masalah yang lebih kecil
  • 22. Faktorial dalam Python (Debug Mode) def faktorial(num): # header fungsi faktorial print("Menghitung faktorial dari", num) # BASE CASE: 0! atau 1! mengembalikan 1 if (num == 0) or (num == 1): print("Faktorial dari {} adalah {}".format(num, 1)) return 1 # RECURSION CASE: untuk num > 1, gunakan rekursi nilai_faktorial = num * faktorial(num-1) print("Faktorial dari {} adalah {}".format(num, nilai_faktorial)) return nilai_faktorial
  • 23. Misteri (asumsi num > 0) def misteri(num): if num == 1: return 1 return num + misteri(num-1)
  • 25. Pemangkatan dengan Angka Nonnegatif def pangkat(num, n): # base case: num pangkat 0 hasilnya 1 if n == 0: return 1 # recursion case return num * pangkat(num, n-1)
  • 26. Buat fungsi iteratif* untuk mencari nilai maksimum dari suatu list (asumsi listnya tidak kosong) * Tanpa rekursi, seperti yang telah kita pelajari di bab-bab sebelumnya
  • 27. Buat fungsi iteratif* untuk mencari nilai maksimum dari suatu list (asumsi listnya tidak kosong) def maksimum_iter(lst): max_temp = lst[0] for i in range(1,len(lst)): if lst[i] > max_temp: max_temp = lst[i] return max_temp * Tanpa rekursi, seperti yang telah kita pelajari di bab-bab sebelumnya
  • 28. Buat fungsi rekursif untuk mencari nilai maksimum dari suatu list (asumsi listnya tidak kosong)
  • 29. Buat fungsi rekursif untuk mencari nilai maksimum dari suatu list (asumsi listnya tidak kosong) def maksimum_rek(lst): # base case if len(lst) == 1: return lst[0] # recursion case max_sisa = maksimum_rek(lst[1:]) if max_sisa > lst[0]: return max_sisa else: return lst[0]
  • 30. Mencari nilai maksimum dari suatu list (asumsi listnya tidak kosong) def maksimum_rek(lst): # base case if len(lst) == 1: return lst[0] # recursion case max_sisa = maksimum_rek(lst[1:]) if max_sisa > lst[0]: return max_sisa else: return lst[0] PENDEKATAN REKURSIF def maksimum_iter(lst): max_temp = lst[0] for i in range(1,len(lst)): if lst[i] > max_temp: max_temp = lst[i] return max_temp PENDEKATAN ITERATIF
  • 31. Buat fungsi rekursif untuk mencari suatu nilai dari nested list (list dalam list dalam list ...) Contoh: is_in(5, []) >>> False is_in(5, [1,2,3,4,5]) >>> True is_in(5, [1,2,3,4]) >>> False is_in(5, [1,2,3,4,[5,6]]) >>> True is_in(5, [1,2,[3,4,[5,6]]]) >>> True is_in(5, [1,2,[3,4,[6]]]) >>> False
  • 32. Buat fungsi rekursif untuk mencari suatu nilai dari nested list def is_in(val, lst): if type(lst) != list: # base case if val == lst: return True else: return False else: if len(lst) == 0: # base case return False return is_in(val,lst[0]) or is_in(val,lst[1:]) # recursion
  • 33. Buat fungsi rekursif untuk menghitung total nilai dalam list (list tidak nested, list tidak kosong)
  • 34. Buat fungsi rekursif untuk menghitung total nilai dalam list (list tidak nested, list tidak kosong) def sum(lst): if len(lst)==1: return lst[0] else: return lst[0] + sum(lst[1:])
  • 35. Buat fungsi rekursif untuk cek palindrom pada string
  • 36. Buat fungsi rekursif untuk cek palindrom pada string def palindrom(a_str): if len(a_str)==0: return True elif len(a_str)==1: return True else: if a_str[0]==a_str[-1]: return palindrom(a_str[1:-1]) else: return False
  • 37. Saling rekursi: Genap atau ganjil? (Untuk integer >= 0) Suatu bilangan n adalah genap apabila n-1 adalah ganjil. dan Suatu bilangan n adalah ganjil apabila n-1 adalah genap.
  • 38. Saling rekursi: Genap atau ganjil? def is_even(n): def is_odd(n):
  • 39. Saling rekursi: Genap atau ganjil? def is_even(n): if n == 0: return True else: return is_odd(n-1) def is_odd(n): if n == 0: return False else: return is_even(n-1)
  • 40. Pesan untuk Dibungkus • Fungsi rekursi = memanggil dirinya sendiri • Butuh base case, kalau tidak ya rekursinya tidak habis-habis • Untuk recursion case, pastikan masalah menjadi lebih sederhana
  • 41. Credits (Images, Icons, etc) • https://prateekvjoshi.com/2013/10/05/understanding-recursion- part-i/ • https://www.tutorialspoint.com/data_structures_algorithms/binary_ search_tree.htm • https://www.petanikode.com/fungsi-rekursif/
  • 42. Credits (Teaching Knowledge) • https://en.wikipedia.org/wiki/Recursion_(computer_science) • https://introcs.cs.princeton.edu/java/home/ • All other sources that I probably forgot to mention

Editor's Notes

  • #4: kita juga dapat melihat subtree kiri as a tree where 14 is the root, and also right subtree as a tree where 35 is the root
  • #13: POIN
  • #17: dengan definisi fungsi ini, maka sudah dapat handle kasus faktorial(0) dan faktorial(1) bagaimana dengan faktorial(num) dimana num > 1?
  • #19: POIN gambar proses rekursi untuk 3!
  • #20: Call stack = memori untuk menyimpan state eksekusi fungsi dengan sifat Last-In First-Out (LIFO), bayangkan tumpukan koran
  • #22: COBA: Base casenya dihilangkan Base case, sesuai dengan namanya, tidak ada pemanggilan fungsi ke dirinya sendiri (tanpa rekursi) Recursion case memanggil dirinya sendiri tapi harus melakukan reduksi masalah ke yang lebih simpel! Recursion case juga dipastikan akan mengarah menuju base case
  • #23: Ada modifikasi kode sedikit untuk kebutuhan debugging, tapi makna kode tetap sama
  • #24: POIN jumlah dari n integer pertama (mulai dari 1) mana yang base case dan mana yang recursion case?
  • #25: POIN
  • #27: POIN contoh input: [5], [2, 1, 7, 3], [1, 2, 3, 4] TIDAK BOLEH PAKAI MAX
  • #28: contoh input: [5], [2, 1, 7, 3], [1, 2, 3, 4]
  • #29: POIN
  • #30: gambar proses rekursi untuk [5], [2, 1, 7, 3], [1, 2, 3, 4]
  • #31: Tak selamanya rekursi itu indah, hanya gunakan rekursi apabila benar-benar dibutuhkan, ingat rekursi ada cost call stack!
  • #32: POIN
  • #38: disebut juga mutual recursion
  • #39: asumsi n >= 0