File ‹fib.c›

/*
 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

unsigned fib(unsigned n)
{
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    return fib(n - 1) + fib(n - 2);
}

unsigned fib_linear(unsigned n)
{
    unsigned a = 0, b = 1;
    while (n) {
        unsigned t = b;
        b += a;
        a = t;
        n -= 1;
    }
    return a;
}

void call_fib(void)
{
    fib(42);
}