斐波那契数列的递归和非递归法两种表示方法能解释一下是为什么呢?

非递归法
unsigned long long Fibonacci(unsigned long long n)
{
int n1, n2, temp, i;
if (n > 2)
for (n1 = 1, n2 = 1, i = 3; i <= n; i++)
{
temp = n1 + n2;
n1 = n2;
n2 = temp;
}
else n2 = 1;

return n2;

}
递归法
unsigned long long Fibonacci(unsigned long long n)
{
if(n > 2)
return Fibonacci(n - 1) + Fibonacci(n - 2);
else
return 1;
}

非递归的话是不断更新两个斐波那契数来实现求n个斐波那契数,递归的话是不断的把一个斐波那契数表示成两个斐波那契数的和的形式,然后找到最低端的斐波那契数,然后不断的回溯。

非递归是从第一,第二位按照斐波那契的规律不断往后加,一直加到第n位,返回第n位的值
递归是从第n-1位和第n-2位往前推算,直到递归到了第一,第二位的时候返回第一,第二位的值1,然后根据规律往后递推得到第n位的值