human
Kirjoita minulle C-ohjelma, joka laskee ja tulostaa fibbonachin luvut yhdestä kymmeneen.
gpt
Tässä on C-ohjelma, joka laskee Fibbonaccin luvut yhdestä kymmeneen:
```c
#include <stdio.h>


// Fibbonaccin lukujono kohdalla n ( F(n) ) lasketaan seuraavasti
// F(n) = F(n-1) + F(n-2)
// Lukujonolla on kuitenkin kaksi ennalta määriteltyä pistettä, 0 ja 1.
// F(1) = 1
// F(0) = 0
int fib(unsigned int n){

    if(n <= 1)
        return n;

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

}

int main(){

    // Toisto yhdestä kymmeneen
    for(int i = 1; i<=10; i++){

        // Tulosta F(n)
        printf("%i",fib(i));

    }

    return 0;

}
```
human
En ymmärrä mitä sana "unsigned" tekee ensimmäisen funktion alussa. Selitä minulle.
gpt
Sana "unsigned" tarkoittaa suomeksi "etumerkitöntä". C-kielessä  kokonaislukutyyppiset muuttujat kuten ensimmäisen funktion alussa esiintyvä `int n` voidaan rajata saamaan vain positiivisia lukuarvoja (sisältäen myös arvon 0) merkitsemällä nämä määreellä `unsigned`.

Wikipedian C-kielen muuttujien tyyppejä käsittelevän artikkelin (https://en.wikipedia.org/wiki/C_data_types) mukaan `int` ja `unsigned int` tyypit voivat saada arvoja ainakin seuraavilta väleiltä:

* `int`: [−32,767, +32,767]
* `unsigned int`: [0, 65,535]

Käytännössä arvoalue on toteutuskohtainen, mutta ei kuitenkaan tätä pienempi.