# My solution to Code challenge #77

### Victor Hugo Avelar twitter logo github logo Sep 19・1 min read

Implemented in golang, quite easy to be fair 😄

``````func GetNthFib(n int) int {
if n == 1 {
return 0
}
if n == 2 {
return 1
}
x, y := 0, 1
for i := 2; i < n; i++ {
x, y = y, x+y
}
return y
}
``````

## Explanation

So we check for the first two value as this two are required to be able to build the rest of the sequence.

Once we know it is not 0 (x) or 1 (y), we know that the correct result comes from adding the x+y and moving the values 1 place forward.

The loop starts at 2 because otherwise the results will be offset by 2 iterations (we already check the first two statically).

For example, if the loop starts at 0 and they ask for nth 3, then our result will be 3 which is incorrect as the third position on Fibonacci's sequence is 1.

You can play around with it by using this Golang Playground link

DISCUSS (2)

Fibonacci is defined:
Fib(0) = 0
(zero and negative n are more or less optional, depending on your requirements/definition)

Fib(1) = 1
Fib(2) = 1
Fib(n) = (n-1)+(n-2)

Fib(0) = 1
Fib(1) = 0
Fib(2) = 1
Fib(3) = 1
Fib(4) = 2
...

Here is a quick fix:

``````package main

import (
"fmt"
)

func main() {
fmt.Println(getNthFib(4))
}

func getNthFib(n int) int {
if n == 0 {
return 0
}
if n == 1 {
return 1 // x=1
}

// this if is theoretical not necessary in this code
// because y := 1 -> skip for loop -> directly return y
// but better for Readability and clean code
if n == 2 {
return 1 // y=1
}

x, y := 1, 1
for i := 2; i < n; i++ {
x, y = y, x+y
}
return y
}
``````

Here is a challenge for you. Can you do it in recursive way?

Classic DEV Post from Jan 24

## What's your favorite Markdown editor?

Software engineer at trivago. 27, Mexican living in Germany.

Creating your DEV account literally takes 30 seconds and is like casting a vote for open source, inclusion in software, and creating your profile is great for your career.