Java Error: Recursion Error, How to Handle and Elakkan
Recursion bermaksud kaedah memanggil dirinya sendiri semasa pelaksanaan Proses panggilan rekursif ini dipanggil rekursi. Di Java, rekursi ialah kaedah pengaturcaraan biasa yang sering digunakan untuk menangani masalah kompleks dan struktur data. Walau bagaimanapun, semasa menulis program rekursif, anda mungkin menghadapi ralat rekursif, yang perlu dikendalikan dan dielakkan dengan sewajarnya. Artikel ini akan memperkenalkan punca, kaedah rawatan dan teknik mengelakkan ralat rekursi di Jawa.
1. Punca ralat rekursif
Punca biasa ralat rekursif ialah terlalu banyak panggilan rekursif, menyebabkan limpahan timbunan. Tindanan ialah struktur data yang digunakan untuk menyimpan pembolehubah sementara dan maklumat panggilan fungsi semasa pelaksanaan program Setiap kali fungsi dipanggil, maklumat yang berkaitan ditolak ke dalam tindanan sehingga fungsi menyelesaikan pelaksanaan dan mengembalikannya keputusan dialih keluar daripada timbunan. Jika terdapat terlalu banyak rekursi, tindanan akan terus berkembang Apabila kapasiti tindanan mencapai had, ralat limpahan tindanan akan berlaku.
Satu lagi punca ralat rekursi adalah salah atau tiada syarat penamatan untuk rekursi. Rekursi memerlukan syarat penamatan supaya ia boleh dihentikan selepas rekursi mencapai kedalaman tertentu, jika tidak program akan jatuh ke dalam gelung tak terhingga, mengakibatkan ralat rekursi.
2. Cara menangani ralat rekursi
Apabila terlalu banyak rekursi menyebabkan limpahan tindanan, anda boleh menyelesaikan masalah dengan mengubah suai bilangan ulangan. Ralat limpahan tindanan boleh dielakkan dengan meningkatkan kapasiti tindanan atau mengurangkan bilangan ulangan. Anda boleh menggunakan kaedah berikut untuk meningkatkan kapasiti tindanan:
-Xss
Tetapkan saiz kapasiti tindanan,
Anda boleh menggunakan kaedah berikut untuk mengurangkan bilangan ulangan:
Ubah suai logik algoritma: tukar algoritma rekursif kepada algoritma bukan rekursif, contohnya: gunakan gelung untuk menggantikan rekursif.
Apabila keadaan penamatan rekursif tidak betul atau hilang, anda boleh menyelesaikan masalah dengan mengubahsuai keadaan penamatan rekursif. Keadaan penamatan yang betul perlu menentukan situasi rekursif, contohnya:
Apabila mencari dan melintasi pokok binari, syarat penamatan ialah nod itu kosong.
Apabila mencari faktorial, syarat penamatan ialah parameter ialah 0.
3. Bagaimana untuk mengelakkan ralat rekursif
Kaedah lelaran melaksanakan algoritma rekursif melalui gelung, mengelakkan masalah limpahan tindanan semasa panggilan rekursif. Secara amnya, kaedah lelaran adalah lebih cekap daripada kaedah rekursif kerana dalam kaedah rekursif, ruang diperuntukkan pada timbunan untuk setiap panggilan kaedah, manakala dalam kaedah lelaran, tiada ruang tambahan diperlukan untuk diperuntukkan.
Sebagai contoh, berikut ialah kaedah faktorial mencari n secara rekursif:
public int factorial(int n) {
if (n <= 1) { return 1; } else { return n * factorial(n - 1); }
}
Berikut ialah kaedah faktorial untuk mencari n secara berulang:
public int factorial(int public n) {
int res = 1; for (int i = 1; i <= n; i++) { res *= i; } return res;
}
Apabila menulis algoritma rekursif, anda mesti mengambil kira kerumitan masa dan kerumitan ruang bagi algoritma untuk mengelakkan ralat rekursif. Anda boleh mengikut prinsip berikut:
Pilih algoritma rekursif dengan betul.
Dalam algoritma rekursif, tetapkan keadaan penamatan dengan betul.
Dalam algoritma rekursif, cuba kurangkan saiz data sebanyak mungkin untuk mengelakkan limpahan tindanan.
4. Ringkasan
Rekursi ialah kaedah pengaturcaraan biasa, juga dalam Java. Walau bagaimanapun, semasa menulis atur cara rekursif, anda mungkin menghadapi ralat rekursif, seperti limpahan tindanan dan gelung tak terhingga. Kaedah untuk menyelesaikan ralat rekursi biasanya termasuk mengubah suai bilangan rekursi, mengubah suai syarat penamatan rekursi, dsb. Untuk mengelakkan ralat pengulangan, gunakan kaedah lelaran dan bukannya kaedah rekursif dan tulis algoritma rekursif yang betul.
Atas ialah kandungan terperinci Ralat Java: Ralat Rekursi, Cara Mengendalikan dan Mengelak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!