| 
  • Earn a $50 Amazon gift card for testing a new product from the makers of PBworks. Click here to apply.

  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

View
 

FibonacciGenerator

Page history last edited by Kenneth Finnegan 11 years, 8 months ago

This is a simple drop-in function that will return the next number in the Fibonacci sequence every time you call it.  specialcase is used to properly generate the first two numbers, 0 and 1, before dropping into the well known next = current + previous pattern.  num1 and num2 are the previous and current numbers in the sequence, and since they're "static," their values will be retained between calls.

Note that return specialcase++; returns the value of specialcase before incrementing it, otherwise it would return 1, 2 instead of the needed 0, 1.

 

Code:

int genfib() {

    static int num1=0, num2=1, specialcase = 0;

    if (specialcase < 2) {

        return specialcase++;

    }

    int num3 = num1 + num2;

    num1 = num2;

    num2 = num3;

    return num3;

}

 

Usage:

while (1) {

     printf("%d\n", genfib());

}

 

The expected output is:

0

1

1

2

3

5

8

--- etc ---

 


Extensions:

There is no method to reset fibgen if you need to start over, but encapsulating the variables num1, num2, and specialcase in a struct would be trivial.  Then pass the pointer to this struct to fibgen every time you call it.

 

int fibgen() could be easily rewritten to use 64 bit variables if a longer sequence is needed for some reason.  Just change the function declaration, num1, num2, and num3 to uint64_t.

 


Sources:

http://en.wikipedia.org/wiki/Fibonacci_number

Comments (0)

You don't have permission to comment on this page.