Mengapa Anda harus belajar rekursi bahkan jika Anda tidak akan pernah menggunakannya? Solusi rekursif melatih Anda pada beberapa pola pikir: 1. Alih-alih mencoba menghasilkan solusi, Anda sering memulai dengan "apa struktur solusi yang valid" bekerja mundur. Untuk beberapa masalah, bekerja mundur jauh lebih mudah. 2. Saat Anda memecahkan masalah, mudah terganggu oleh semua "bagaimana jika". Saat memecahkan masalah secara rekursif, Anda sering dipaksa untuk "mengabaikan" 90% masalah dan fokus untuk mendapatkan hanya satu bagian yang benar. 3. Apa yang sering menjadi kasus "sudut" dalam solusi imperatif adalah "kasus dasar" dalam kasus rekursif. Berpikir secara rekursif terkadang memaksa Anda untuk tidak mengabaikan kasus sudut. Selain itu, solusi rekursif banyak menggunakan pencocokan pola sehingga Anda dipaksa untuk memikirkan semua situasi yang dapat Anda hadapi. Berikut adalah contoh yang sangat bagus: Leetcode 335 Self Crossing (Masalah sulit). Anda melakukan perjalanan pada lintasan spiral pada kisi-kisi (yaitu selalu belok kiri setelah menempuh jarak agak jauh ke utara, selatan, timur, atau barat). Pertanyaannya adalah, "mengingat jarak setiap 'segmen' spiral secara berurutan, apakah spiral melintasi dirinya sendiri atau tidak?" Meskipun solusi untuk ini tidak perlu berupa fungsi yang memanggil dirinya sendiri, solusi "bagus" menggunakan properti rekursif: 1. Jika kita belum menemukan persimpangan, maka kita dapat berasumsi tidak ada penyeberangan atau spiral yang tidak valid di masa lalu. Kami selanjutnya memperhatikan bahwa tidak masalah jika kami bepergian ke kiri, kanan, atas, atau bawah karena kami hanya bisa berbelok ke kiri. Yang kami pedulikan adalah apakah segmen sebelumnya sejajar dengan giliran kami sebelumnya dan seberapa jauh jaraknya. 2. Ketika kita berbelok ke kiri, ada jumlah "segmen" yang sangat terbatas dalam spiral yang dapat kita tabrak, yang "secara rekursif" benar tidak peduli seberapa besar spiral itu. Ada banyak data masa lalu tentang spiral yang dapat kita abaikan. 3. Ada sejumlah skenario terbatas di giliran Anda sebelumnya yang memengaruhi logika Anda: a) apakah Anda melakukan perjalanan cukup jauh untuk tidak menabrak apa pun, b) jika tidak, apa yang berpotensi Anda tabrak? (juga terbatas). Hal yang menjengkelkan tentang Leetcode hards adalah mereka tiba-tiba menjadi mudah jika Anda menemukan wawasan kunci. Tetapi wawasan kunci itu akan datang kepada Anda secara lebih alami jika Anda telah melatih diri Anda dalam pemrograman rekursif. Ini bukan hanya tentang merancang fungsi yang menyebut diri mereka sendiri — ini tentang memaksa diri Anda untuk memecah masalah sedemikian rupa sehingga dapat diselesaikan dengan fungsi yang memanggil dirinya sendiri. Semakin banyak cara Anda dapat memecah masalah, semakin besar kemungkinan Anda menemukan solusi "aha". Jelas, saya tidak perlu leetcode dalam profesi saya, tetapi saya perlu menemukan cara kreatif untuk memecah masalah sehingga mereka menjadi dapat dimengerti — dan pelatihan dalam rekursi pasti membantu dengan itu.
1,67K