This lazy cached calculate is wonderful ,but i think the benefit from it mostly due to cache .....
On Oct 19, 11:56 pm, "Lauri Oherd" <[EMAIL PROTECTED]> wrote: > There is also a faster way to calculate fibonacci numbers in Clojure > (code taken from > fromhttp://en.wikibooks.org/wiki/Clojure_Programming#Lazy_Fibonacci): > > (defn fib-seq [] > ((fn rfib [a b] > (lazy-cons a (rfib b (+ a b)))) > 0 1)) > > user=> (time (take 38 (fib-seq))) > "Elapsed time: 0.032965 msecs" > (0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 > 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 > 1346269 2178309 3524578 5702887 9227465 14930352 24157817) > > Lauri > > 2008/10/19 [EMAIL PROTECTED] <[EMAIL PROTECTED]>: > > > > > Clojure's > > > (defn fib [n] > > (if (or (zero? n) (= n 1)) > > 1 > > (+ (fib (dec n) ) (fib (- n 2))))) > > > (time (fib 36)) > > > "Elapsed Time: 10475.325226 msecs" > > 24157817 > > > Scala's > > > def fib(n:Int):Int=if (n==0||n==1)1 else fib(n-1)+fib(n-2) > > def time(cal: =>Int)={ > > val beginTime=System.currentTimeMillis > > cal > > val endTime=System.currentTimeMillis > > println(endTime-beginTime) > > } > > fib(36) > > res70:Int=24157817 > > time(fib(36)) > > 263 > > > Both not tail recursive,both running on Repl (scala's interpreter),but > > the difference between two is huge > > 10475~263 > > My box : Intel core2 cpu 1.86G,2G mem > > Clojure and scala both latest build from svn > > > any ideas? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---