斐波那契数列实现

斐波那契数列指的是这样一个数列 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;
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值