Advertisement
witto

Fib in Groovy

Jun 14th, 2011
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 0.73 KB | None | 0 0
  1. int fib(int num) {
  2.   if(num < 2)
  3.     return num
  4.     return fib(num-1) + fib(num-2)
  5. }
  6.  
  7. // Com tail-call
  8. def fibTail(int num, BigInteger i = 1, BigInteger k = 0) {
  9.   if(num <= 0)
  10.     return k
  11.   return fibTail(num-1, i+k, i)
  12. }
  13.  
  14. // Com otimizacao de tail-call (sem StackOverflowError)
  15. def fibTailOpt
  16. fibTailOpt = {int num, BigInteger i = 1, BigInteger k = 0 ->
  17.     if(num <= 0)
  18.         return k
  19.     return fibTailOpt.trampoline(num-1, i+k, i)
  20. }.trampoline()
  21.  
  22. def test(func, arg) {
  23.     t1 = System.nanoTime()
  24.     res = func(arg)
  25.     t2 = System.nanoTime()
  26.     println "Tempo: ${(t2-t1)/1000000000}"
  27.     println "Resultado: ${res}"
  28. }
  29.  
  30. n = args[0].toInteger()
  31. test(fibTailOpt, n)
  32. test(this.&fibTail, n)
  33. test(this.&fib, n)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement