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

  • Whenever you search in PBworks, Dokkio Sidebar (from the makers of PBworks) will run the same search in your Drive, Dropbox, OneDrive, Gmail, and Slack. Now you can find what you're looking for wherever it lives. Try Dokkio Sidebar for free.

View
 

FibonacciGenerator

Page history last edited by Kenneth Finnegan 14 years, 9 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.