Memahami Recursion dan Recursive Formula
Perulangan
Iterasi adalah pengulangan suatu proses. Seorang siswa yang pergi ke sekolah mengulangi proses pergi ke sekolah setiap hari sampai lulus. Kami pergi ke toko kelontong setidaknya sekali atau dua kali sebulan untuk membeli produk. Kami mengulangi proses ini setiap bulan. Dalam matematika, deret Fibonacci mengikuti properti dari repetasi tugas juga. Mari kita pertimbangkan urutan Fibonacci di mana dua angka pertama adalah 0 dan 1, semua angka lainnya adalah jumlah dari dua angka sebelumnya.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
Langkah Iterasi
Rumus Fibonacci dapat ditulis sebagai,
F (n) = F (n - 1) + F (n - 2)
fibonacci (0) = 0
fibonacci (1) = 1
fibonacci (2) = fibonacci (1) + fibonacci (0) = 1 + 0 = 1
fibonacci (3) = fibonacci (2) + fibonacci (1) = 1 + 1 = 2
fibonacci (4) = fibonacci (3) + fibonacci (2) = 2 + 1 = 3
fibonacci (5) = fibonacci (4) + fibonacci (3) = 3 + 2 = 5
fibonacci (6) = fibonacci (5) + fibonacci (4) = 5 + 3 = 8
Algoritma yang diberikan di bawah ini mengembalikan angka Fibonacci ke-n.
Rekursi
Setiap kali kita mendapatkan nomor Fibonacci baru (bilangan ke-n) bahwa bilangan ke-n sebenarnya (n - 1) nomor th ketika kita menemukan (n + 1) Fibonacci sebagai n Fibonacci berikutnya. Seperti yang kita lihat langkah-langkah iterasi yang disebutkan di atas: jika n = 2 saat itu
fibonacci (2) = fibonacci (2 - 1) + fibonacci (2 - 2) = fibonacci (1) + fibonacci (0) = 1 + 0 = 1
Sekarang, kami ingin menghasilkan fibonacci (3), yaitu n = 3.
fibonacci (3) = fibonacci (3 - 1) + fibonacci (3 - 2) = fibonacci (2) + fibonacci (1) = 1 + 1 = 2
Itu berarti, setiap kali n meningkatkan nilai arus (n - 1) th dan (n - 2) fibonacci juga meningkat. Tapi itu melelahkan untuk melacak (n - 1) th dan (n - 2) fibonacci untuk setiap n. Bagaimana dengan menulis metode yang memanggil dirinya sendiri untuk mengulangi tugas iterasi dengan sendirinya?
Metode yang memanggil dirinya sendiri dinamakan sebagai metode rekursif. Metode rekursif harus memiliki kasus dasar di mana program berhenti memanggil dirinya sendiri. Kasus dasar kami untuk seri Fibonacci adalah fibonacci (0) = 0 dan fibonacci (1) = 1. Jika tidak, metode Fibonacci memanggil dirinya sendiri dua kali - fibonacci (n - 1) dan fibonacci (n - 2). Kemudian ia menambahkan mereka untuk mendapatkan fibonacci (n). Metode rekursif untuk menemukan n Fibonacci dapat ditulis sebagai -
TIP PRO: Jika masalahnya ada pada komputer Anda atau laptop / notebook, Anda harus mencoba menggunakan Perangkat Lunak Reimage Plus yang dapat memindai repositori dan mengganti file yang rusak dan hilang. Ini berfungsi dalam banyak kasus, di mana masalah ini berasal karena sistem yang rusak. Anda dapat mengunduh Reimage Plus dengan Mengklik di SiniJika kita perhatikan dengan teliti, rekursi mengikuti properti tumpukan. Ini memecahkan subproblem yang lebih kecil untuk mendapatkan solusi dari masalah. Untuk n> 1, ia mengeksekusi baris terakhir. Jadi, jika n = 6, Fungsi memanggil dan menambahkan fibonacci (6 - 1) dan fibonacci (6 - 2). fibonacci (6 - 1) atau fibonacci (5) memanggil dan menambahkan fibonacci (5 - 1) dan fibonacci (5 - 2). Rekursi ini berlanjut sampai 6 mencapai ke nilai pangkalnya yaitu fibonacci (0) = 0 atau fibonacci (1) = 1. Setelah menyentuh base case, ia menambahkan dua nilai dasar dan naik sampai mendapatkan nilai fibonacci ( 6). Di bawah ini adalah representasi pohon rekursi.
Seperti yang bisa kita lihat, seberapa kuat rekursi bisa. Hanya satu baris kode yang membuat pohon di atas (baris terakhir dari kode di atas termasuk kasus dasar). Rekursi mempertahankan tumpukan dan masuk ke lebih dalam hingga mencapai kotak dasar. Pemrograman Dinamis (DP): Rekursi mudah dimengerti dan dikodekan tetapi mungkin mahal dalam hal waktu dan memori. Lihatlah pohon rekursi di bawah ini. Substrik kiri dimulai dengan fib (4) dan subtree kanan dimulai dengan fib (4) persis sama. Mereka menghasilkan hasil yang sama yaitu 3 tetapi melakukan tugas yang sama dua kali. Jika n adalah angka besar (contoh: 500000) maka rekursi dapat membuat program sangat lambat karena akan memanggil sub tugas yang sama beberapa kali.
Untuk menghindari masalah ini, pemrograman dinamis dapat digunakan. Dalam pemrograman dinamis kita dapat menggunakan subtugas yang telah dipecahkan sebelumnya untuk menyelesaikan tugas masa depan dengan jenis yang sama. Ini adalah cara untuk mengurangi tugas untuk memecahkan masalah asli. Mari kita memiliki sebuah array [] dimana kita menyimpan solusi subtask yang telah dipecahkan sebelumnya. Kita sudah tahu bahwa fib [0] = 0 dan fib [1] = 1. Mari kita simpan dua nilai ini. Sekarang, berapa nilai dari fib [2]? Karena fib [0] = 0 dan fib [1] = 1 telah disimpan, kita hanya harus mengatakan fib [2] = fib [1] + fib [0] dan itu saja. Kita dapat menghasilkan fib [3], fib [4], fib [5],, fib [n] dengan cara yang sama. Sub-tugas sebelumnya yang dipecahkan dipanggil untuk mendapatkan subtugas berikutnya sampai tugas awal tidak diselesaikan, sehingga mengurangi perhitungan yang berlebihan.
TIP PRO: Jika masalahnya ada pada komputer Anda atau laptop / notebook, Anda harus mencoba menggunakan Perangkat Lunak Reimage Plus yang dapat memindai repositori dan mengganti file yang rusak dan hilang. Ini berfungsi dalam banyak kasus, di mana masalah ini berasal karena sistem yang rusak. Anda dapat mengunduh Reimage Plus dengan Mengklik di Sini