Electric Scooter for Kids Everett Washington

Electric Scooter for Kids Everett Washington

TI Fungsi Rekursif (1/2)

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.

Fungsi Rekursif (1/2)

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.