ฉันได้ทดลองใช้นิพจน์ const ซึ่งประเมินเวลารวบรวม แต่ฉันเล่นกับตัวอย่างที่ดูเหมือนรวดเร็วอย่างไม่น่าเชื่อเมื่อดำเนินการในเวลารวบรวม
#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;
}
เมื่อฉันเรียกใช้รหัสนี้ใช้เวลาประมาณ 7 วินาทีในการเรียกใช้ จนถึงตอนนี้ดีมาก แต่เมื่อฉันเปลี่ยนlong int res = fib(45)
ไปconst long int res = fib(45)
ก็จะใช้เวลาไม่ได้เป็นครั้งที่สอง เพื่อความเข้าใจของฉันมันถูกประเมิน ณ เวลารวบรวม
แต่การรวบรวมใช้เวลาประมาณ 0.3 วินาที
คอมไพเลอร์สามารถประเมินสิ่งนี้ได้อย่างรวดเร็วอย่างไร แต่ ณ รันไทม์มันต้องใช้เวลามากขึ้น? ฉันใช้ gcc 5.4.0
fib
ใช้ การใช้ตัวเลขฟีโบนักชีที่คุณมีอยู่ด้านบนนั้นช้ามาก ลองแคชค่าฟังก์ชันในโค้ดรันไทม์และมันจะเร็วขึ้นมาก