Recursive Function
Apa itu recursive function? Recursive function adalah sebuah function yang memanggil/mengeksekusi dirinya sendiri. Recursive function Pandai dikatakan salah satu yang Pandai kita gunakan Kepada melakukan perulangan. Ketika menulis kode aplikasi, terkadang Terdapat kasus dimana akan lebih mudah Apabila dilakukan dengan recursive function. Teladan penggunaan sederhana recursive function adalah ketika melakukan operasi factorial.
Ketika Membangun recursive function, kita harus memastikan function tersebut dapat berhenti. Apabila Bukan, maka akan terkena error stack overflow
atau Mengungguli limit stack karena function Lanjut memanggil dirinya sendiri. Oleh karena itu, biasanya recursive function Bukan langsung memanggil dirinya sendiri tetapi bergantung pada kondisi tertentu.
Teladan
Berikut ini adalah Teladan recursive function yang digunakan Kepada 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 Membangun pengkondisian Kepada memeriksa Apabila value
bernilai 1 maka kita langsung mengembalikannya tanpa memanggil function Kembali. Sebaliknya, Apabila value
Bukan 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, Apabila kita memanggil function doFactorial
dengan parameter 5 maka parameter berikutnya akan menjadi 4, kemudian 3, kemudian 2, dan 1. Akhirnya recursive function Bukan akan dipanggil Kembali.
Sekarang mari perhatikan Teladan operasi factorial menggunakan for loop.
func doFactorialWithForLoop(value int) int {
result := 1
for i := value; i > 0; i-- {
result *= i
}
return result
}
Sekilas mungkin Bukan Terdapat perbedaan yang signifikan Apabila dilihat dari kodenya. Tapi berikut ini adalah beberapa kelebihan dan kekurangan menggunakan recursive function.
Kelebihan:
- Kode mudah ditulis
- Kurangi pemanggilan fungsi yang Bukan perlu
- Sangat Berfaedah ketika menerapkan solusi yang sama
- Rekursi mengurangi panjang kode
- Sangat Berfaedah dalam memecahkan masalah struktur data
Kekurangan:
- Recursive function umumnya lebih Pelan daripada fungsi non-rekursif
- Terkadang memerlukan memori yang lebih Kepada menyimpan hasil sementara dalam stack
- Terkadang sulit Kepada menganalisis atau memahami kodenya
- Bukan terlalu efisien dalam konsep kompleksitas waktu
- Kemungkinan out of memory Apabila kondisi recursive Bukan diperiksa dengan Betul
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