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 first 10 numbers in the Fibonacci sequence are: 0, 1, 1, 2, 3, 5, 8, 13, 21 and 34.
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.
3
8
6
2
21
8
fibonacci
functionYour program should contain a fibonacci
function
that takes an integer and returns an integer.
Please refer to the information for your chosen language:
int fibonacci(int n)
fibonacci :: Int -> Int
def fibonacci(n):
int fibonacci(int n)
public static int Fibonacci(int n)
inside a public class Program
public static int fibonacci(int n)
inside a public class Fibonacci
function fibonacci(n)
function fibonacci (n)
def factorial(n)
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.
fibonacci
functionYour 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:
You can implement fibonacci
using the following auxiliary function:
fibaux :: Int -> Int -> Int -> Int
It should return a number in the Fibonacci sequence. The third argument should be the number of remaining operations. The second argument should be the previous number in the sequence. The first argument should be the previous-previous number in the sequence.
fibaux 0 1 3
starts with 0 and 1 and
updates the first two arguments recursively
as it decrements the third.
try first: factorial fibonacci1
try next: index-string
Copyright © 2020-2023 Rudy Matela
This text is available under the CC BY-SA 4.0 license.
Originally available on cscx.org/fibonacci