//递归(效率低下)
#include<stdio.h>
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}
//非递归
#include<stdio.h>
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)// 每次循环都是比第几个数少循环2次
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}
判断一个数至少要几步可以成为Fibonacci数,只能一步步加1或减1
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
scanf("%d", &n);
int f1 = 0;
int f2 = 1;
int f3 = 0;
while (1)
{
if (n == f2)
{
printf("%d", 0);
break;
}
else if (n < f2)
{
if (abs(f1 - n) < abs(f2 - n))
{
printf("%d", abs(f1 - n));
}
else
{
printf("%d", abs(f2 - n));
}
break;
}
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return 0;
}