On Tuesday, March 24, 2015 at 8:33:24 AM UTC+5:30, Chris Angelico wrote: > Mathematics doesn't like defining sequences, except by defining > functions, and so it has to convert the concept of "defining the > Fibonacci sequence" into "defining a function F(N) which returns the > Nth Fibonacci number", and that's where the double recursion comes > from. It's not an inherent part of the sequence, which is, uhh, > sequential.
Here is a pure 'recursive-data' definition of fib. [Of course assuming you can buy that generators are data not functions] ================== from itertools import tee def fib(): yield 0 yield 1 f, fn = tee(fib()) next(fn) yield from (x+y for (x,y) in zip(f, fn)) The fact that this is data may be more clear if you see it as a rendering (uglification) of the Haskell list-definition fibs = 0 : 1 : zipWith (+) fibs (tail fibs) -- https://mail.python.org/mailman/listinfo/python-list