Posted to tcl by kbk at Tue Aug 21 01:11:44 GMT 2012view raw
- namespace path ::tcl::mathop
- interp recursionlimit {} 120000
- proc fib {n {i 0} {this 0} {next 1}} {
- if {$i >= $n} {
- return $this
- } else {
- tailcall fib $n [+ $i 1] $next [+ $this $next]
- }
- }
- puts [time {set result [fib 40000]}]
- #puts "fib(40000) == $result"
- proc fib {n} {
- variable memo
- if {[info exists memo($n)]} {
- return $memo($n)
- } elseif {$n == 0} {
- return 0
- } elseif {$n == 1} {
- return 1
- } else {
- return [set memo($n) [+ [fib [- $n 2]] [fib [- $n 1]]]]
- }
- }
- puts [time {set result [fib 40000]}]
- #puts "fib(40000) == $result"
- exit