続・Scheme演習第2回-問1
前回は、
とりあえず、3つめの時間の比較は次回以降にして、今回はfib1とfib2のみ作った。
「Scheme」の検索結果 - にたまごほうれん草
という状況なので、時間を計測してみた。
まず、
- 時間計測にはtimeという関数を使う
- for文みたいなのはないので、繰り返しするには再帰を使わないといけない
で、たぶん単なる私の勉強不足なのだろうが、任意の関数を指定回数実行する関数を作れなかったので、以下のようにfib1,fib2をそれぞれ指定回数実行する関数を定義した。
(define (fib1-loop n loop) (fib1 n) (if (> loop 0) (fib1-loop n (- loop 1)))) (define (fib2-loop n loop) (fib2 n) (if (> loop 0) (fib2-loop n (- loop 1))))
時間に差が出るように100万回ずつ実行。
(time (fib1-loop 10 1000000)) (time (fib2-loop 10 1000000))
結果
結構大きな差が出ましたね。
gosh> ;(time (fib1-loop 10 1000000)) ; real 14.420 ; user 14.420 ; sys 0.000 #<undef> gosh> ;(time (fib2-loop 10 1000000)) ; real 0.855 ; user 0.850 ; sys 0.000 #<undef>