欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

斐波那契数列实现

程序员文章站 2022-03-13 13:47:58
...

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........。这个数列从第3项开始,每一项都等于前两项之和。

方法一:迭代实现(打印前40个数列值)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int a[40];

    a[0] = 0, a[1] = 1;
    printf("%d %d ",a[0],a[1]);

    for(i=2; i<40;i++)
    {
        a[i]=a[i-1]+a[i-2];
        printf("%d ",a[i];
    }

    return 0;
}

方法一改进:方法一数列从0开始打印,而实际斐波那契数列是从1开始的

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n=0;

    printf("输入需要打印几个数列值:");
    scanf("%d",&n);

    int *fib=(int*)malloc(n*sizoef(int));
    *fib=1;
    *(fib+1)=1;
    printf("%d %d ",*fib,*(fib+1));

    for(int i=2;i<n;i++)
    {
        *(fib+i)=*(fib+i-1)+*(fib+i-2);
        printf("%d ",*(fib+i));
    }

    free(fib);

    return 0;
}

方法二:递归实现:

#include <stdio.h>
#include <stdlib.h>

int Fib(int n)
{
    if(n < 2)
        return 1;
    else
        return Fib(n-1)+Fib(n-2);
}

int main()
{
    int n=0;

    printf("请输入打印几个数列值:");
    scanf("%d",&n);

    for(int i=0;i<n;i++)
    {
        printf("%d ",Fib(i));
    }

    return 0;
}

方法二递归实现效率低下,应尽量不用递归,用迭代

相关标签: 数据结构和算法