斐波那契数列实现问题,不知道哪儿错了

int fib(int n) {
    if (n == 0 )
        return n;

    int a = 1, b = 0;
    for (int i = 1; i < n; i++) {
        a = a + b;
        b = a - b;
        a %= 1000000007;
    }
    return a;
}

 int fib(int n) {
  if (n == 0 || n==1)
   return n;

  int a = 1, b = 0;
  for (int i = 1; i < n; i++) {
   a = a + b;
   b = a - b;
   a %= 1000000007;
  }
  return a;
 }

#include<stdio.h>
int fib(int n) {
    if (n == 0)
        return n;

    int a = 1, b = 0;
    for (int i = 1; i < n; i++) {
        a = a + b;
        b = a - b;
        a %= 1000000007;
    }
    return a;
}
int main()
{
    printf("%d",fib(8));
    return 0;
}