Fungsi Rekursif (1/2) 1. Definisikanlah operasi PENJUMLAHAN dan PENGURANGAN bilangan bulat

Berikut ini adalah pertanyaan dari 4dministraktor pada mata pelajaran TI untuk jenjang Sekolah Menengah Atas

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 dan Penjelasan

Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.

(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:

  • a + 0 = a
  • a - 0 = a

Sifat identitas tersebut menjadi "basis" dari relasi rekurens yang akan didefinisikan.

Maka, dalam bentuk notasi fungsional, operasi penjumlahan dan pengurangan bilangan bulat adanb dapat didefinisikan secara simultan (bersama-sama) dengan:

\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}

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 packagerandom pada Python.

Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.

Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact

Last Update: Wed, 16 Nov 22