Saya telah mencoba ekspresi const yang dievaluasi pada waktu kompilasi. Tapi saya bermain dengan contoh yang tampak sangat cepat ketika dieksekusi pada waktu kompilasi.
#include<iostream>
constexpr long int fib(int n) {
return (n <= 1)? n : fib(n-1) + fib(n-2);
}
int main () {
long int res = fib(45);
std::cout << res;
return 0;
}
Ketika saya menjalankan kode ini, dibutuhkan sekitar 7 detik untuk menjalankannya. Sejauh ini bagus. Tapi ketika saya mengubah long int res = fib(45)
untuk const long int res = fib(45)
dibutuhkan bahkan satu detik. Untuk pemahaman saya itu dievaluasi pada waktu kompilasi.
Tetapi kompilasi membutuhkan waktu sekitar 0,3 detik
Bagaimana kompilator dapat mengevaluasi hal ini dengan sangat cepat, tetapi pada saat runtime dibutuhkan waktu lebih lama? Saya menggunakan gcc 5.4.0.
fib
. Implementasi angka-angka fibonacci yang Anda miliki di atas sangat lambat. Coba caching nilai-nilai fungsi dalam kode runtime dan itu akan jauh lebih cepat.