3. 在上一題與本題的解答中分別有兩個計算Fibonacci數的程式,
一個很短,很簡單,但另一個卻很長、很複雜,
請用比較大的n, 並且透過反覆計算1000次的方式,
看看哪一個程式比較快。
答:
我們利用time.h的函數來取結尾和開頭的時間相減,
分別在兩個主程式中加入以下的程式碼:
Code:
int i; clock_t start_time, end_time; float total_time = 0; start_time = clock(); for( i = 1; i <= 1000; i++) // 做1000次 fibonacci(8000000); end_time = clock(); total_time = (float) (end_time - start_time)/CLOCKS_PER_SEC; printf("Time : %f sec \n", total_time);
結果如下:
Traditional: 32.514999 sec
Matrix: 0.001000 sec
另外測試的狀況,使用矩陣方式數量再多2個層級,
我們才能取到有實際代表性的執行時間。
但再多兩個層級的話一般的做法就會花很久很久的時間了XD
結論:
在n很大的時候,二階的Fibonacci相當節省時間,
這跟前面理論上推導的狀況是一樣的。
沒有留言:
張貼留言