斐波那契数列求解c语言

从键盘输入一个整数,输出距离该数最近的斐波那契(Fibonacci)数。

根据输入的数不同,此问题可能有一个答案(或者比输入的数大或者比输入的数小),

也可能需要输出两个值(一个比输入的数大,一个比输入的数小,两个距离输入的数一样近)。

如果输入的数是 斐波那契数本身,则它就是问题解,输出即可。

1,1,2,3,5,8,13,21,34,……这是斐波那契(Fibonacci)数列的前几项。斐波那契数列的特点:前两项均为1,后面每一项都是其前面两项之和。

【输入形式】输入一个正整数n
【输出形式】离n最近的斐波那契(Fibonacci)数

【样例输入1】Input n:72

【样例输出1】55 89

【样例输入2】Input n:2

【样例输出2】2

【样例说明】若输出两个数,则以一个空格分隔输出的两个数

#include <stdio.h>
int fibo(int x)
{
    if(x==1||x==2)
        return 1;
    return fibo(x-1)+fibo(x-2);
}
int main()
{
    int i=1,result,n,big,small,a,b;
    scanf("%d",&n);
    while(i++)
    {
        result=fibo(i);
        if(n>result)
            small=result;
        else
        {
            big=result;
            break;
        }
    }
    a=big-n;
    b=n-small;
    if(a==b)
        printf("%d %d",small,big);
    else 
        printf("%d",a>b?small:big);
    return 0;
}