Strategi pengoptimuman rekursif ekor secara berkesan mengurangkan kedalaman tindanan panggilan fungsi dan menghalang limpahan tindanan dengan menukar panggilan rekursif ekor kepada gelung. Strategi pengoptimuman termasuk: Kesan rekursif ekor: Semak sama ada terdapat panggilan rekursif ekor dalam fungsi. Tukar fungsi kepada gelung: Gunakan gelung dan bukannya panggilan rekursif ekor dan kekalkan tindanan untuk menyimpan keadaan perantaraan.
C++ Strategi Pengoptimuman Rekursif Ekor dalam Fungsi Rekursif
Pengenalan
Rekursi ekor bermaksud fungsi memanggil dirinya secara rekursif secara terakhir, semasa pelaksanaan panggilan ini adalah langkah terakhir. Mengoptimumkan rekursi ekor boleh mengurangkan kedalaman tindanan panggilan fungsi dengan ketara, dengan itu mengelakkan ranap program yang disebabkan oleh limpahan tindanan.
Strategi Pengoptimuman
Pengkompil C++ tidak mempunyai pengoptimuman rekursi ekor terbina dalam, tetapi kami boleh melaksanakan pengoptimuman secara manual dengan menukar fungsi rekursif ekor menjadi gelung:
int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }
int factorial_optimized(int n) { int result = 1; while (n > 0) { result *= n; n--; } return result; }
Kes praktikal
Berikut ialah Contoh pengoptimuman rekursif ekor untuk mengira faktorial:
// 未优化的尾递归函数 int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } // 优化的尾递归函数 int factorial_optimized(int n) { int result = 1; while (n > 0) { result *= n; n--; } return result; } int main() { int n = 5; int result = factorial(n); cout << "Factorial of " << n << " (unoptimized): " << result << endl; result = factorial_optimized(n); cout << "Factorial of " << n << " (optimized): " << result << endl; return 0; }
Output:
Factorial of 5 (unoptimized): 120 Factorial of 5 (optimized): 120
Ia dapat dilihat bahawa fungsi yang dioptimumkan tidak memerlukan pengiraan semula yang sama kedalaman timbunan dan meningkatkan kecekapan.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan strategi pengoptimuman rekursi ekor bagi fungsi rekursif C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!