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

  • Work with all your cloud files (Drive, Dropbox, and Slack and Gmail attachments) and documents (Google Docs, Sheets, and Notion) in one place. Try Dokkio (from the makers of PBworks) for free. Now available on the web, Mac, Windows, and as a Chrome extension!

View
 

FibonacciGenerator

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