Media Belajar Bahasa Pemrograman | by APPKEY

KotlinTutorial Kotlin 37 : Memahami Kotlin Recursion

Tutorial Kotlin 37 : Memahami Kotlin Recursion

-

Last Updated on December 14, 2022 by

Kotlin recursion merupakan fungsi yang melakukan pemanggilan terhadap dirinya sendiri. Kali ini, kami akan mengajak Anda mempelajari apa itu Kotlin recursion (fungsi recursive Kotlin) dan juga fungsi tail recursive.

Pernahkah Anda mendengar istilah recursive dan recursion sebelumnya? Secara teori, recursive adalah fungsi di Kotlin yang mampu memanggil dirinya sendiri. Sedangkan teknik pemanggilannya dikenal sebagai recursion.

Teknik recursive juga bisa terjadi di dunia nyata. Ambil contoh penempatan dua cermin paralel yang saling berhadapan. Objek apapun yang Anda tempatkan nantinya di antara mereka akan dipantulkan secara recursive.

Cara Kerja Kotlin Recursion

kotlin recursion

Bagaimana cara kerja fungsi recursion di Kotlin programming? Struktur pemanggilan recursion adalah sebagai berikut:

fun main(args: Array<String>) {

    ... .. ...

    recurse()

    ... .. ...

}




fun recurse() {

    ... .. ...

    recurse()

    ... .. ...

}

Pada contoh di atas, fungsi recurse() dipanggil dari badan fungsi recurse() juga. Cara kerja program ini dapat disimak selengkapnya pada gambar diagram berikut:

kotlin recursion

Di sini, panggilan rekursif terus berlanjut dalam jangka waktu panjang dan menyebabkan infinite recursion (recursion tidak terbatas).

Namun Anda bisa menghindarinya dengan menggunakan metode if…else (atau pendekatan lain yang sejenis). Gunakan if…else jika ada satu cabang kode yang terus memanggil recrusive, namun yang lainnya tidak.

Artikel Terkait  Tutorial Kotlin 35 : Arti Infix Notation, Fungsi & Contoh

Contoh: Menemukan Angka Faktorial dengan Kotlin Recursion

Kode berikut adalah contoh fungsi recursion untuk menemukan angka faktorial:

fun main(args: Array<String>) {

    val number = 4

    val result: Long




    result = factorial(number)

    println("Factorial of $number = $result")

}




fun factorial(n: Int): Long {

    return if (n == 1) n.toLong() else n*factorial(n-1)

}

 

Adapun hasil dari program di atas saat dijalankan adalah:

Factorial of 4 = 24

Cara Kerja Kotlin Recursion Faktorial()

Berikutnya ada fungsi factorial(). Cara kerja panggilan recursive factorial() bisa Anda simak selengkapnya pada diagram berikut:

kotlin recursion

Jika dirangkum, maka tahap-tahap pemanggilan fungsi factorial() adalah:

factorial(4)              // 1st function call. Argument: 4

4*factorial(3)            // 2nd function call. Argument: 3

4*(3*factorial(2))        // 3rd function call. Argument: 2

4*(3*(2*factorial(1)))    // 4th function call. Argument: 1

4*(3*(2*1))                 

24

Kotlin Tail Recursion

Setelah memahami apa itu Kotlin recursion, kini waktunya menyimak fungsi recursion lainnya, yakni tail.

Tail recursion lebih merupakan sebuah konsep general alih-alih fitur khusus di bahasa pemrograman Kotlin. Beberapa bahasa pemrograman, termasuk Kotlin, menggunakan tail untuk mengoptimalkan panggilan recursive. Namun ada juga bahasa programming yang tidak mendukungnya, seperti Phyton.

Apa Itu Tail Recursion?

Dalam rekursi normal, kita melakukan semua panggilan recursive terlebih dahulu, lalu dilanjutkan dengan menghitung hasil dari nilai yang dikembalikan (return values) di akhir—seperti yang diperlihatkan pada contoh di atas. Maka dari itu, kita tidak bisa memperoleh seluruh hasil hingga semua panggilan recursive dilakukan.

Namun seluruh proses tersebut berjalan berkebalikan di tail recursion. Di sini perhitungan dilakukan di awal, baru diikuti dengan pemanggilan recursive (panggilan recursive pun meneruskan hasil dari tahapan yang Anda proses saat ini ke panggilan berikutnya).

Artikel Terkait  Tutorial Kotlin 41 : Pahami Apa Itu Singleton Object pada Kotlin!

Cara kerja ini pula mengakibatkan panggilan recursive menjadi setara dengan perulangan (looping), sekaligus mencegah timbulnya resiko stack overflow.

Kondisi Terjadinya Tail Recursion

Sebuah fungsi recursive dinyatakan memenuhi syarat untuk tail recursion apabila panggilan ke diri sendiri tersebut merupakan operasi yang terakhir dilakukan. Contohnya adalah sebagai berikut:

Contoh 1: Pemrograman berikut tidak memenuhi syarat untuk tail recursion karena fungsi panggilan ke diri sendiri n*factorial(n-1) bukanlah operasi yang terakhir.

fun factorial(n: Int): Long {




    if (n == 1) {

        return n.toLong()

    } else {

        return n*factorial(n - 1)     

    }

}

Contoh 2: Kode ini memenuhi syarat untuk tail recursion karena fungsi panggilan ke diri sendiri fibonacci(n-1, a+b, a) adalah operasi yang terakhir.

fun fibonacci(n: Int, a: Long, b: Long): Long {

    return if (n == 0) b else fibonacci(n-1, a+b, a)

}

Catatan penting: tandai fungsi dengan penanda tailrec agar kompiler memahami bahwa Anda ingin melakukan tail recursion.

Contoh 1: Kotlin Tail Recursion

Simaklah contoh berikut ini untuk menambah pemahaman Anda mengenai pemanfaatan tail recursion di Kotlin:

import java.math.BigInteger




fun main(args: Array<String>) {

    val n = 100

    val first = BigInteger("0")

    val second = BigInteger("1")




    println(fibonacci(n, first, second))

}




tailrec fun fibonacci(n: Int, a: BigInteger, b: BigInteger): BigInteger {

    return if (n == 0) a else fibonacci(n-1, b, a+b)

}

Jika program di atas dijalankan, maka hasilnya akan menjadi:

354224848179261915075

Program ini menghitung hasil ke-100 dari rangkaian seri Fibonacci. Contoh di atas juga menggunakan class BigInteger yang diimpor dari perpustakaan standar Java mengingat output yang dihasilkan bisa berupa bilangan bulat yang sangat besar.

Artikel Terkait  Tutorial Kotlin 12 : Kotlin Sealed Class, Cara Menggunakan Sealed Class pada Kotlin

Fungsi fibonacci() di sini pun turut ditandai dengan penanda tailrec sehingga kode memenuhi syarat untuk mengeksekusi panggilan tail recursive. Pada akhirnya, kompiler pun mengoptimalkan proses recursion.

Jika Anda mencoba mencari tahu hasil perhitungan Fibonacci ke-20.000 (atau yang lebih besar lagi) tanpa menggunakan tail recursion, maka kompiler akan membuang pengecualian java.lang.StackOverflowError.

Namun, contoh program di atas tetap berfungsi dengan baik akibat penggunaan tail recursion tadi. Perhitungan angka faktorial berjalan dengan recursion berbasis loop yang efisien alih-alih yang “tradisional”.

Contoh 2: Pemfaktoran Menggunakan Tail Recursion

Sayangnya, contoh koding perhitungan faktorial di atas tidak dapat digunakan untuk optimalisasi tail recursion. Sebagai gantinya, Anda bisa memakai program berikut ini:

fun main(args: Array<String>) {

    val number = 5

    println("Factorial of $number = ${factorial(number)}")

}




tailrec fun factorial(n: Int, run: Int = 1): Long {

    return if (n == 1) run.toLong() else factorial(n-1, run*n)

}

Hasil keluaran dari program di atas adalah:

Factorial of 5 = 120

Kompiler dapat mengoptimalkan recursion dalam program ini karena fungsi recursive memenuhi syarat untuk tail recursion. Contoh di atas juga menggunakan penanda tailrec yang memberitahu kompiler untuk mengoptimalkan proses recursion.

Itulah dia pembahasan mengenai apa itu Kotlin recursion beserta cara kerjanya. Semoga ulasan kali ini bermanfaat menambah wawasan Anda terkait Kotlin programming, ya!

Mau belajar coding secara gratis? Yuk baca CODEKEY sekarang di https://codekey.id/, karena ada ratusan tutorial programming spesial menanti Anda. Sampai bertemu lagi di seri belajar koding selanjutnya!


Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.

Jasa Pembuatan Aplikasi

Jasa Pembuatan Website

Jasa Pembuatan Paket Aplikasi

Jasa Pembuatan Internet Marketing

Tutorial

Subscribe Sekarang

Dapatkan beragam informasi menarik tentang bahasa pemrograman langsung melalui email Anda. Subscribe sekarang dan terus belajar bersama kami!

Blog Post Ranking 10

Tutorial PHP 22 : Cara Membuat Redirect PHP dengan Cepat dan Mudah

Jika Anda melakukan browsing di browser kesayangan Anda, mungkin Anda pernah melihat link yang berisikan “php redirect” atau yang...

Tutorial PHP 23 : Cara Membuat Messages Alert PHP

Alert box atau alert messages digunakan di situs web untuk menampilkan pesan peringatan kepada pengguna bahwa mereka telah memasukkan...

Tutorial PHP 2 : Cara Install PHP, Langkah Awal Belajar PHP

PHP adalah bahasa pemrograman gratis dan open source. Secara teknis tidak perlu menginstal PHP: sebagian besar host web dan...

Tutorial Python 9 : Cara Membuat Looping Python

Pada artikel sebelumnya, Codekey telah menjelaskan tentang Operasi Kondisional Python yang di dalamnya menyinggung tentang percabangan dan perulangan. Belajar...

Tutorial HTML/CSS 23 : Cara Membuat Form Sederhana dengan HTML

Form memiliki peran yang sangat krusial bagi website atau aplikasi untuk menjaga sistem keamanannya. Form HTML digunakan untuk mengumpulkan...

Tutorial SQL 8 : Constraint SQL, Bagaimana Fungsi dan Penggunaannya?

Pada artikel sebelumnya Anda telah mempelajari tentang wildcard SQL, pada artikel kali ini kami akan menjelaskan tentang constraint SQL. Jika...

Tutorial Javascript 8 : Array Javascript, Panduan Lengkap Cara Membuatnya

Seperti bahasa pemrograman yang berorientasi objek lainnya, dalam JavaScript juga terdapat array. Jika Anda memiliki banyak objek yang ingin...

Tutorial SQL 20 : Mari Pelajari Cara Menggunakan Fungsi GROUP by SQL

Pada pembahasan seri Tutorial SQL ke- 20 ini, Codekey akan membahas tentang GROUP BY yang merupakan statement di dalam...

Tutorial Python 7 : Python String Format dan Cara Mudahnya

Anda ingin belajar Python dan ingin menjadi ahli dalam bahasa pemrograman Python? Mari belajar bersama Codekey! Pada pembahasan kali...

Tutorial Python 8 : Langkah Mudah Membuat Operasi Kondisional pada Python

Pada pembahasan sebelumnya, Codekey telah menjelaskan kepada Anda tentang pengoperasian string pada Python mulai dari menggabungkan hingga memanipulasi string...

Bisnis

Online Service

Peluang Bisnis

Model Bisnis

Entrepreneurship

Uang

Ketrampilan

Outsourcing

Monetize

Pemasaran

SEO

Internet Marketing

Dasar Pemasaran

Strategi Pemasaran

Situs Web Analitik

Iklan

Teknologi

Teknologi Terbaru

AI

Komputer

Jaringan

Paling Sering dibaca
Mungkin Anda Menyukainya