fibonacci series what Iam is missing ?

Dave Angel davea at davea.name
Mon Mar 23 14:44:04 EDT 2015


On 03/23/2015 12:16 PM, Chris Angelico wrote:
> On Tue, Mar 24, 2015 at 3:01 AM, Ganesh Pal <ganesh1pal at gmail.com> wrote:
>> Hello team ,
>>
>>
>> [root at localhost Python]# cat  fibonacci-Sequence-3.py
>>
>> ## Example 2: Using recursion
>> def fib(n):
>>      if n == 0:
>>          return 0
>>      elif n == 1:
>>          return 1
>>      else:
>>          return fib(n-1) + fib(n-2)
>> print fib(5)
>>
>> # python  fibonacci-Sequence-3.py
>> 5
>>
>> what Iam I missing in the program , I was expecting 0,1,1,2,3 ?
>
> What you're doing is printing out the fifth Fibonacci number. So there
> are three things to note:
>
> 1) To display the entire sequence, you will need some sort of loop.
> 2) Your algorithm is about as hopelessly inefficient as it could
> possibly be, barring deliberate intent. [1]
> 3) You are running Python 2.x; unless you have a good reason not to,
> it's better to use Python 3.
> 4) You're running as root. Normally, something like this should be run
> as a regular user - it's safer that way.
>
> Err, *amongst* the things to note are such diverse elements as...
> etcetera, etcetera. Ahem.
>
> I would suggest rewriting this as a much more straight-forward loop;
> begin at the beginning, go on till you reach the point you wanted,
> then stop.
>
> ChrisA
>
> [1] Cue the demonstration of a worse version from someone's student?
>

I'll give you a worse version.  Back in the day I had occasion to write 
a simple program in a language which had no add or subtract.  It could 
only increment and decrement indices.  So to simulate that:


#without using any arithmetic other than increment and decrement
def fib3(n):
     if n == 0:
         return 0
     elif n == 1:
         return 1
     else:
         a = fib3(n-1)
         n = n-1
         b = fib3(n-1)
         while b > 0: a,b = a+1, b-1
         return a

Interestingly enough that only seems to triple the time taken.

I wouldn't recommend running either of these with n > 34 or so.

## Example 2: Using recursion with caching
cache = [0, 1]
def fib4(n):
     if len(cache) <= n:
         value = fib4(n-2) + fib4(n-1)
         cache.append(value)
     return cache[n]

This one takes less than a millisecond up to n=200 or so.

-- 
DaveA



More information about the Python-list mailing list