求斐波那契数列

#include <stdio.h>
//求斐波那契数列,当求第n个数时,数为多少?
//1 1 2 3 5 8 13 21.......
//思路1:先写逻辑,用递归方法,当求第n个数时,数为多少?这个数列得前俩个相同,把他分开;大于2时Fib(n-1)+Fib(n-2)
//思路2:先写逻辑,当我们的数字逐渐增大时,用递归的方法会造成计算上的重复,因此我们用循环的方法进行求解,
//      前边2位数相同,当大于2时,我们将前三个数,设为a<b<c得顺序,即c=a+b,每次进入循环,让a = b; b = c;n--;实现相加,
//      问:n--;目的是?
//      答:我们正常计算循环,比如要计算第4个数我们怎么计算,(1+1=2;)这个式子被算过了  (1+2=3;)我们只求这一个式子
//      我们如果用Fib(n-1)+Fib(n-2)就要计算2^4次,Fib(3)+Fib(2)....
int Fib(int n);//递归

int Fib_while(int n);//循环

int main()
{
    int ret;
    int n;
    scanf("%d",&n);
    //ret = Fib(n); //递归算法
    ret = Fib_while(n);
    printf("%d",ret);
}

int Fib_while(int n) //循环
{
    //1 1 2 3 5 8 13 21
    //a b c
    //  a b c
    //...
    int a = 1;
    int b = 1;
    int c = 1;
    while(n>2)
    {
        c = a + b;
        a = b;
        b = c;
        printf("-----%d",n);
        n--; //让算过的数,不要再计算了,因为前边n-1个数已经算过了
    }
    if(n < 2)
    {
        return 1;
    }
    return c;
}

int Fib(int n) //思路1
{
    if(n>2)
    {
        return Fib(n-1) + Fib(n-2);
    }
    else
    {
        return 1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值