index | submit | rank | book

fibonacci – The Fibonacci Sequence

Write a program that computes numbers in the fibonacci sequence. This sequence is defined recursively as follows:

That is, the zeroth Fibonacci number is zero and the first Fibonacci number is one. Other Fibonacci numbers are given by the sum of its two predecessors.

The Fibonacci tiling

The first 10 numbers in the Fibonacci sequence are: 0, 1, 1, 2, 3, 5, 8, 13, 21 and 34.

Input and output

Input will consist of several lines, each with a single integer n indicating the position in the Fibonacci sequence.

0 ≤ n ≤ 42

For each line of input, output should contain a line with a corresponding number Fₙ indicating the Fibonacci number in position n.

Example input

3
8
6

Example output

2
21
8

The fibonacci function

Your program should contain a fibonacci function that takes an integer and returns an integer. Please refer to the information for your chosen language:

Your function is expected to have good performance. The maximum expected complexity is O(n).

Specifically for this exercise when using Python, JavaScript, Lua or Ruby, avoid using sys.exit(), process.exit(), os.exit() or exit, as your program is appended with some extra assertions in one of the test sets.

Scoring

Hints

Your function should be efficient. It should still run with reasonable runtime for larger input values.

If you get “time limit exceeded”, this means your function is not efficient enough. Can you come up with an input value that illustrates this inefficiency? Why your this function inefficient? Can you construct a call tree to illustrate if there are any redundant operations made by your program?

If you want to avoid recalculation, thus improving the efficiency, you need to implement Fibonacci in terms of an iterative “build-up” starting from 0 and 1:

For Haskell programmers:

try first: factorial fibonacci1

try next: index-string

index | submit | rank | book

Copyright © 2020-2023 Rudy Matela
This text is available under the CC BY-SA 4.0 license.
Originally available on cscx.org/fibonacci