Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Explain Fibonacci one-liner ??

by Marshall (Canon)
on May 10, 2010 at 16:56 UTC ( [id://839258]=note: print w/replies, xml ) Need Help??


in reply to Explain Fibonacci one-liner ??

This is an unnecessary obfuscation for no apparent reason. The statement albeit short is very obtuse. JavaFan has given a great explanation of how this obscure thing works.

A Perl implementation of a more traditional and MUCH faster approach is below. Perl allows very obscure looking code to be written, but why do it?

#!/usr/bin/perl -w use strict; foreach (1..15) { print fibonacci($_), " "; } # prints: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 sub fibonacci { my $number = shift; my $cur_num = 1; my $prev_num = 1; my $sum; return 1 if ($number == 1 || $number == 2); # to get Op's output, supress the above by this: # return "" if ($number == 1 || $number == 2); # or of course just start the sequence at a different number $number -= 2; while ($number--) { $sum = $cur_num + $prev_num; $prev_num = $cur_num; $cur_num = $sum; } return $sum; }

Replies are listed 'Best First'.
Re^2: Explain Fibonacci one-liner ??
by JavaFan (Canon) on May 10, 2010 at 18:27 UTC
    And even faster again is a solution based on the property:
    F(n) = floor((((1+sqrt(5))/2)**n) / sqrt(5)) + 0.5)
    my $PHI = (1 + sqrt(5)) / 2; sub fib ($) {int($PHI ** $_[0] / sqrt(5) + 0.5)} say fib $_ for 0 .. 10; __END__ 0 1 1 2 3 5 8 13 21 34 55

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://839258]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (3)
As of 2024-04-26 06:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found