Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int fib(int num) {
- if(num < 2)
- return num
- return fib(num-1) + fib(num-2)
- }
- // Com tail-call
- def fibTail(int num, BigInteger i = 1, BigInteger k = 0) {
- if(num <= 0)
- return k
- return fibTail(num-1, i+k, i)
- }
- // Com otimizacao de tail-call (sem StackOverflowError)
- def fibTailOpt
- fibTailOpt = {int num, BigInteger i = 1, BigInteger k = 0 ->
- if(num <= 0)
- return k
- return fibTailOpt.trampoline(num-1, i+k, i)
- }.trampoline()
- def test(func, arg) {
- t1 = System.nanoTime()
- res = func(arg)
- t2 = System.nanoTime()
- println "Tempo: ${(t2-t1)/1000000000}"
- println "Resultado: ${res}"
- }
- n = args[0].toInteger()
- test(fibTailOpt, n)
- test(this.&fibTail, n)
- test(this.&fib, n)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement