Artikel ini merupakan bagian dari seri Belajar Golang Dari Dasar

Recursive Function

Apa itu recursive function? Recursive function adalah sebuah function yang memanggil/mengeksekusi dirinya sendiri. Recursive function bisa dikatakan salah satu yang bisa kita gunakan untuk melakukan perulangan. Ketika menulis kode aplikasi, terkadang ada kasus dimana akan lebih mudah jika dilakukan dengan recursive function. Contoh penggunaan sederhana recursive function adalah ketika melakukan operasi factorial.

Saat membuat recursive function, kita harus memastikan function tersebut dapat berhenti. Jika tidak, maka akan terkena error stack overflow atau melebihi limit stack karena function terus memanggil dirinya sendiri. Oleh karena itu, biasanya recursive function tidak langsung memanggil dirinya sendiri tetapi bergantung pada kondisi tertentu.

Contoh

Berikut ini adalah contoh recursive function yang digunakan untuk melakukan operasi factorial.

func doFactorial(value int) int {
	if value == 1 {
		return value
	}
	return value * doFactorial(value-1)
}

Function tersebut menerima value dengan tipe integer dan mengembalikan data dengan tipe integer. Seperti yang sudah dijelaskan sebelumnya bahwa recursive function harus dapat berhenti, maka kita membuat pengkondisian untuk memeriksa jika value bernilai 1 maka kita langsung mengembalikannya tanpa memanggil function lagi. Sebaliknya, jika value tidak sama dengan satu maka value akan dikalikan dengan nilai kembalian dari function doFactorial dengan mengisi parameter value dikurang 1. Pengurangan ini bertujuan agar parameter yang dikirimkan pada eksekusi function berikutnya adalah berisi nilai pada urutan sebelumnya. Sehingga, jika kita memanggil function doFactorial dengan parameter 5 maka parameter berikutnya akan menjadi 4, kemudian 3, kemudian 2, dan 1. Akhirnya recursive function tidak akan dipanggil lagi.

Sekarang mari perhatikan contoh operasi factorial menggunakan for loop.

func doFactorialWithForLoop(value int) int {
	result := 1
	for i := value; i > 0; i-- {
		result *= i
	}
	return result
}

Sekilas mungkin tidak ada perbedaan yang signifikan jika dilihat dari kodenya. Tapi berikut ini adalah beberapa kelebihan dan kekurangan menggunakan recursive function.

Kelebihan:

  • Kode mudah ditulis
  • Kurangi pemanggilan fungsi yang tidak perlu
  • Sangat berguna ketika menerapkan solusi yang sama
  • Rekursi mengurangi panjang kode
  • Sangat berguna dalam memecahkan masalah struktur data

Kekurangan:

  • Recursive function umumnya lebih lambat daripada fungsi non-rekursif
  • Terkadang memerlukan memori yang lebih untuk menyimpan hasil sementara dalam stack
  • Terkadang sulit untuk menganalisis atau memahami kodenya
  • Tidak terlalu efisien dalam konsep kompleksitas waktu
  • Kemungkinan out of memory jika kondisi recursive tidak diperiksa dengan benar

Full Code

package main

import "fmt"

func doFactorial(value int) int {
	if value == 1 {
		return 1
	}
	return value * doFactorial(value-1)
}

func doFactorialWithForLoop(value int) int {
	result := 1
	for i := value; i > 0; i-- {
		result *= i
	}
	return result
}

func main() {
	resultRecursive := doFactorial(5)
	fmt.Println(resultRecursive)

	resultForLoop := doFactorialWithForLoop(5)
	fmt.Println(resultForLoop)
}

Berikutnya: #28: Closure

comments powered by Disqus
Lightbox