(Fib-1)+(Fib-2)的递归计算

斐波那契数 1 1 2 3 5 8 13 21 34 55
要求第五个数的斐波那契数列该怎么计算?
第八个又怎么计算?直接代入进去吗?
这个递归的逻辑又是什么?

前两项是1,从第三项开始,是前两项的和,代码如下:

#include <stdio.h>
int fun(int n)
{
    if(n==1 || n==2)
        return 1;
    else
        return fun(n-1)+fun(n-2);
}

int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",fun(n));
    return 0;
}

若想求得第 n 个斐波那契数,我们知道有递归公式:f(n) = f(n - 1) + f(n - 2),其中 f(0) = 0, f(1) = 1。由于递归会先压栈再弹栈,压栈时会将这些子结果保存,然后等到所有子结果计算完毕后,再弹栈来将这些子结果归并,即为第 n 个斐波那契数。其中递归的出口就是 f(0) 和 f(1) 。
所以,无论是第几个,都可以带入到这个公式当中

都是直接传参进去就行。
实际上程序就是把这个公式表达出来而已
斐波那契数说的是一个数列从第3项开始,每一项都等于前两项之和。

int fun(int n)
{
    if(n==1 || n==2)
        return 1;
    else
        return fun(n-1)+fun(n-2); 
}


上面代码也就是说,1和2就是这个数列的前两个数,不需要计算直接返回。从第3个数开始也就是前两个数之和,即fun(3) = fun(3-1) + fun(3-2);以此类推