# Carbon language Fibonacci series, print nth Fibonacci number

Google introduced [Carbon programming language](https://tipseason.com/carbon-language-tutorial-syntax/) with a modern language syntax to become a successor to C++.

One of the challenges many beginner developers are facing is to run basic examples since the language is in a very early stage without even having a compiler. So here is a working example to print fibonacci series using Carbon language. 

## How to print fibonacci series in carbon lang 
To recollect Fibonacci series, here the following sequence that we want to print. 

`0, 1, 1, 2, 3, 5, 8, 13, 21 ....`

Currently, there is no support `<` symbol yet in Carbon language. Also `for` loop is not yet supported in carbon language. So we will use different approach. 

To print fibonacci series in carbon, we will use combination of recursion + iteration to print fibonacci sequence. Here are 2 steps we follow. 

1. Print nth fibonacci number in Carbon programming language
2. Print fibonacci sequence using While loop in carbonlang

Let's dive in 

## Step 1: Print nth fibonacci number in Carbon language
We use a recursive code to calculate nth fibonacci number using the follow recursive formula. 
```
fib(n) = fib(n-1) + fib(n-2); 
if n <= 1 we can just print n. 
```

Let's write code in carbon language. 

```
fn Square(x: i32) -> i32 {
  return x * x;
}

fn fib(n: i32) -> i32 {
    if(n == 0) {
        return 0;
    }
    if(n == 1) {
        return 1;
    }

    return fib(n - 1) + fib(n - 2);
}
```


## Step 2: Print fibonacci sequence using While loop in carbonlang
The next step is the call fib(n) for n times. This can be achieved using while loop. 
Observe fib(i) inside `Print` method. 

```
fn fibSeries(count: i32) {
    var i: i32 = count;
    while(not (i == 0)) {
        Print("{0}", fib(i));
        i = i - 1;
    }

}
```

## Print fibonacci sequence in carbonlang  
Connecting two pieces together, we can have 

```
package sample api;

fn Square(x: i32) -> i32 {
  return x * x;
}

fn fib(n: i32) -> i32 {
    if(n == 0) {
        return 0;
    }
    if(n == 1) {
        return 1;
    }
    return fib(n - 1) + fib(n - 2);
}


fn fibonacciSeries(count: i32) {
    var i: i32 = count;
    while(not (i == 0)) {
        Print("{0}", fib(i));
        i = i - 1;
    }

}

fn Main() -> i32 {
    var n: i32 = 6;
    Print("Input n: {0}", n);
    Print("nth fibonacci number result: {0}", fib(n));
    Print("-----------", n); 
    Print("Fibonacci series for n = {0}", n);
    fibonacciSeries(10);
    return 0;
}
```

The output for this would be 
```
Input n: 6
nth fibonacci number result: 8
-----------
Fibonacci series for n = 6
55
34
21
13
8
5
3
2
1
1
```

You can try this by yourself using carbon language compiler explorer online: 
[Compiler explorer](https://carbon.godbolt.org/)

Additional Reading in Carbon language:

Carbon language memory safety for secure memory management: 
[Carbon language memory management](https://tipseason.com/carbon-language-memory-safety/)

This is a part of carbon language series for beginners. Will share carbon language tips and working examples regularly. You can view full carbon language tutorial video here. 

### Carbon language short course 

%[https://youtu.be/vff1BRrQr_w]

If you find other better ways to print fibonacci series in carbon, share your thoughts in the comments. 
