Fibonacci series recursion error

rusi rustompmody at gmail.com
Mon May 2 03:08:26 EDT 2011


On Apr 30, 11:14 am, Peter Otten <__pete... at web.de> wrote:

> For the record, the one true way to implement the Fibonacci series in Python
> is
>
> >>> def fib():
>
> ...     a = b = 1
> ...     while True:
> ...             yield a
> ...             a, b = b, a+b # look ma, no temporary variable

Not any claim to 'the one true pythonic way' but fib can be written in
a clean recursive way with linear space-time behavior asz follows:

Dijkstra explained that fib is an 2nd order recurrence
-- fib(n) defined in terms of fib (n-1) and fib(n-2)
whereas programming loops and recursion are 1st order -- state at
iteration n defines state at iteration n+1.

Converting the 2nd order fib relation to a 1st order one trivially
gives a linear program.
The key insight from Dijkstra is that all we need to do is to move
from a recursive function returning fibonacci nos to one returning
pairs of adjacent ones.

def fibpair(n):
    # returns (fib(n), fib(n+1))
    if n==0:
        return (1,1)
    else:
        (a,b) = fibpair(n-1)
        return (b, a+b)

After that fib is just this:

def fib(n):
    a,b = fibpair(n)
    return a;




More information about the Python-list mailing list