Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.ruby > #3206

Re: Tail Call Optimization (Tail Recursion)

From "WJ" <w_a_x_man@yahoo.com>
Newsgroups comp.lang.ruby
Subject Re: Tail Call Optimization (Tail Recursion)
Date 2011-04-20 04:12 +0000
Organization NewsGuy - Unlimited Usenet $19.95
Message-ID <iolmeo02p4k@enews1.newsguy.com> (permalink)
References (1 earlier) <ef09b557ab56bb9fa49e426e2df5137a@ruby-forum.com> <iohuqr02fa2@enews2.newsguy.com> <BANLkTindWcQ=Ndy5Cxo5egCSSwNixExtkw@mail.gmail.com> <ioidrk02rnf@enews5.newsguy.com> <BANLkTikmX9apEJYn72r+PGCs5AL35OqUWA@mail.gmail.com>

Show all headers | View raw


Louis-Philippe wrote:

> the thing is the tail recursive one doesn't really yield the full sequence
> as it omits the 0, and so:
> 
> fib(30)          => 832040
> tail_fib(30)    => 1346269


Corrected:

;;  Gambit Scheme

(define (fib n)
  (define (%fib n a b)
    (if (= 1 n)
      b
      (%fib (- n 1) b (+ a b))))
  (%fib n 0 1))

(println "30th fibonacci number is " (fib 30))

(define bigfib 0)
(time
  (set! bigfib (fib 50000)))
(let* ((str (number->string bigfib))
       (len (string-length str)))
  (println "Result of (fib 50000) has " len " digits:")
  (println (substring str 0 9) " ... " (substring str (- len 9) len)))

  ==>

30th fibonacci number is 832040
(time (set! bigfib (fib 50000)))
    562 ms real time
    516 ms cpu time (500 user, 16 system)
    807 collections accounting for 157 ms real time (188 user, 0 system)
    119070200 bytes allocated
    no minor faults
    no major faults
Result of (fib 50000) has 10450 digits:
107777348 ... 373553125 

Back to comp.lang.ruby | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Tail Call Optimization (Tail Recursion) Terry Michaels <cmhoward@frigidcode.com> - 2011-04-18 00:59 -0500
  Re: Tail Call Optimization (Tail Recursion) 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-18 12:29 -0500
    Re: Tail Call Optimization (Tail Recursion) "WJ" <w_a_x_man@yahoo.com> - 2011-04-18 18:10 +0000
      Re: Tail Call Optimization (Tail Recursion) Louis-Philippe <default@spiralix.org> - 2011-04-18 15:40 -0500
        Re: Tail Call Optimization (Tail Recursion) "WJ" <w_a_x_man@yahoo.com> - 2011-04-18 22:27 +0000
          Re: Tail Call Optimization (Tail Recursion) Louis-Philippe <default@spiralix.org> - 2011-04-19 07:28 -0500
            Re: Tail Call Optimization (Tail Recursion) "WJ" <w_a_x_man@yahoo.com> - 2011-04-20 04:12 +0000
              Re: Tail Call Optimization (Tail Recursion) "WJ" <w_a_x_man@yahoo.com> - 2011-04-20 04:30 +0000
                Re: Tail Call Optimization (Tail Recursion) Robert Klemme <shortcutter@googlemail.com> - 2011-04-20 06:37 -0500
        Re: Tail Call Optimization (Tail Recursion) Vincent Manis <vmanis@telus.net> - 2011-04-18 19:41 -0500
          Re: Tail Call Optimization (Tail Recursion) Steve Klabnik <steve@steveklabnik.com> - 2011-04-18 20:42 -0500
            Re: Tail Call Optimization (Tail Recursion) Vincent Manis <vmanis@telus.net> - 2011-04-18 21:51 -0500
              Re: Tail Call Optimization (Tail Recursion) Michael Edgar <adgar@carboni.ca> - 2011-04-18 22:12 -0500
              Re: Tail Call Optimization (Tail Recursion) Steve Klabnik <steve@steveklabnik.com> - 2011-04-19 08:48 -0500
                Re: Tail Call Optimization (Tail Recursion) Brian Candler <b.candler@pobox.com> - 2011-04-19 08:56 -0500
                Re: Tail Call Optimization (Tail Recursion) Steve Klabnik <steve@steveklabnik.com> - 2011-04-19 10:07 -0500
  Re: Tail Call Optimization (Tail Recursion) Steve Klabnik <steve@steveklabnik.com> - 2011-04-18 12:39 -0500

csiph-web