1. Definisikanlah operasi PENJUMLAHAN dan PENGURANGAN bilangan bulat sebagai relasi rekurens dalam bentuk notasi fungsional (notasi matematis).
2. Buatlah program (C/C++/Python) yang mengimplementasikan kedua relasi rekurens tersebut dalam bentuk fungsi rekursif, dan lakukan test dengan beberapa kasus.
(Jawaban soal nomor 1 ada di bagian Pembahasan.)
Kode Program (Python)
import random
def tambah(a, b) -> int:
if b == 0:
return a
if b < 0:
return kurang(a, abs(b))
return tambah(a, b-1) + 1
def kurang(a, b) -> int:
if b == 0:
return a
if b < 0:
return tambah(a, abs(b))
return kurang(a, b-1) - 1
### Program Utama
print('PENJUMLAHAN')
for i in range(0, 10):
a = random.randint(-99, 99)
b = random.randint(-99, 99)
print(f'⁍ {a:3d} + {b:3d} = {tambah(a, b)}')
print('PENGURANGAN')
for i in range(0, 10):
a = random.randint(-99, 99)
b = random.randint(-99, 99)
print(f'⁍ {a:3d} - {b:3d} = {kurang(a, b)}')
______________
Contoh Output Hasil Eksekusi
PENJUMLAHAN
⁍ 91 + 81 = 172
⁍ 99 + 84 = 183
⁍ 78 + -22 = 56
⁍ -96 + 63 = -33
⁍ -41 + 67 = 26
⁍ 56 + -71 = -15
⁍ -94 + -34 = -128
⁍ 37 + 81 = 118
⁍ -44 + 40 = -4
⁍ -91 + 38 = -53
PENGURANGAN
⁍ -43 - 47 = -90
⁍ 8 - 27 = -19
⁍ 31 - -95 = 126
⁍ 58 - -58 = 116
⁍ 88 - -49 = 137
⁍ 58 - -98 = 156
⁍ 40 - 76 = -36
⁍ 84 - -9 = 93
⁍ -66 - 88 = -154
⁍ 34 - 54 = -20
______________
Pembahasan
Sebelum mendefinisikan operasi aritmetika penjumlahan dan pengurangan bilangan bulat, terlebih dahulu kita ingat sifat identitas penjumlahan dan pengurangan, yaitu:
- [tex]a + 0 = a[/tex]
- [tex]a - 0 = a[/tex]
Sifat identitas tersebut menjadi "basis" dari relasi rekurens yang akan didefinisikan.
Maka, dalam bentuk notasi fungsional, operasi penjumlahan dan pengurangan bilangan bulat [tex]a[/tex] dan [tex]b[/tex] dapat didefinisikan secara simultan (bersama-sama) dengan:
[tex]\begin{aligned}{\tt tambah}(a,b)&=\begin{cases}a\,,&{\rm jika\ }b=0\\{\tt kurang}(a,|b|)\,,&{\rm jika\ }b < 0\\{\tt tambah}(a,b-1)+1\,,\!\!\!&{\rm jika\ }b > 0\\\end{cases}\\{\tt kurang}(a,b)&=\begin{cases}a\,,&{\rm jika\ }b=0\\{\tt tambah}(a,|b|)\,,&{\rm jika\ }b < 0\\{\tt kurang}(a,b-1)-1\,,\!\!\!&{\rm jika\ }b > 0\\\end{cases}\end{aligned}[/tex]
Karena kita telah memiliki definisi relasi rekurens dalam bentuk notasi fungsional, fungsi rekursif yang perlu diimplementasikan dalam bentuk program merupakan "translasi langsung" dari notasi fungsionalnya, yaitu:
def tambah(a, b) -> int:
if b == 0:
return a
if b < 0:
return kurang(a, abs(b))
return tambah(a, b-1) + 1
def kurang(a, b) -> int:
if b == 0:
return a
if b < 0:
return tambah(a, abs(b))
return kurang(a, b-1) - 1
Pada program di atas, bilangan a dan b dihasilkan secara acak (random), dengan menggunakan method randint() dari package random pada Python.