Bagaimana untuk mengelakkan limpahan tindanan yang disebabkan oleh panggilan rekursif dalam fungsi Java? Gunakan gelung dan bukannya rekursi. Elakkan rekursi yang mendalam. Gunakan rekursi ekor. Tetapkan had saiz tindanan.
Elakkan limpahan tindanan daripada panggilan rekursif dalam fungsi Java
Fungsi rekursif sangat berguna dalam Java, tetapi jika digunakan secara tidak betul, ia boleh menyebabkan ralat limpahan tindanan. Limpahan tindanan berlaku apabila bilangan panggilan fungsi menjadi terlalu besar, meletihkan memori yang tersedia.
Cara limpahan tindanan berlaku
Apabila fungsi berulang, ia mencipta bingkai tindanan baharu. Setiap bingkai tindanan mengandungi pembolehubah tempatan fungsi dan alamat pemulangan. Jika fungsi berulang terlalu banyak kali, bilangan bingkai tindanan melebihi memori yang tersedia, menyebabkan limpahan tindanan. Petua untuk mengelakkan limpahan tindanan Gelung tidak mencipta bingkai tindanan baharu dan oleh itu tidak boleh menyebabkan limpahan tindanan.
Elakkan rekursif dalam: Hadkan kedalaman timbunan panggilan rekursif. Jika boleh, pecahkan fungsi rekursif kepada bahagian yang lebih kecil dan lebih mudah diurus.
Gunakan rekursi ekor:public static int fib(int n) { if (n <= 1) { return n; } else { return fib(n - 1) + fib(n - 2); } }
public static int fib(int n) { int a = 0; int b = 1; for (int i = 0; i < n; i++) { int temp = a; a = b; b = temp + b; } return a; }
Atas ialah kandungan terperinci Bagaimana untuk mengelakkan limpahan timbunan daripada panggilan rekursif dalam fungsi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!