递归和非递归分别实现求第n个斐波那契数

1.循环

#include<stdio.h>
int fib(int n)
{
    int a = 1;
    int b = 1;
    int c = 1;
    if (n <= 2)
    {
        return 1;
    }
    else
    {
        for (int i = 0; i < n - 2; i++)//循环上限的确定,例如求第5个斐波那契数就要进行3次累加,所以存在n-2的关系
        {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
}
int main()
{
    int n = 0;
    printf("请输入要求的第多少个斐波那契数:");
    scanf("%d", &n);
    int ret = fib(n);
    printf("%d\n", ret);
    return 0;
}

循环内部也可以写为:

while (n > 2)
    {
        c = a + b;
        a = b;
        b = c;
        n--;
    }

2.递归

#include<stdio.h>
int fib(int n)
{
    int a = 1;
    int b = 1;
    int c = 1;
    if (n <= 2)
    {
        return 1;
    }
    else
    {
        return fib(n - 1) + fib(n - 2);
    }
}
int main()
{
    int n = 0;
    printf("请输入要求的第多少个斐波那契数:");
    scanf("%d", &n);
    int ret = fib(n);
    printf("%d\n", ret);
    return 0;
}

对fib(n - 1) + fib(n - 2)的解释:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40995778/article/details/80294040