thinking:
1.Fibonacci ,那就得把Fibonacci数表达出来;
method_1:用递归;
method_2: 用数字相加;
2.想得到最小步数,就得求出最接近的Fibonacci数;method_1: 通过递归求出,通过判断递归出数的值,与输入值比较,锁定左右两值;
method_2: 通过两变量相加等于较大值较小值等于原来较大值,较大值大于输入值时,即两变量为左右两值;
3.通过判断左右两值与输入值相减的绝对值大小,较小的为最小步数;method_1:用较大值减输入值,输入值减去较小值;
method_2:直接用用绝对值(abs);
//method 1
#include<iostream>
using namespace std;
//写出递归
int Fiboncci(int n)
{
if(n<=1)
return n;
if(n>1)
return Fibonacci(n-1)+Fibonacci(n-2);
}
//写出比较值
int _compare(int num,int lesser,int larger)
{
int step=num-lesser;
if(step>(larger-num))
step=larger-num;
return step;
}
int main()
{
int num,lesser,larger;
cin>>num;
//从最小开始用递归计算出每个Fibonacci数;
for(int i=0;i<num;++i)
{
lesser=Fibonacci(i);
larger=Fibonacci(i+1);
//进行判断
if(larger>num)
break;
}
int step=_compare(num,lesser,larger);
cout<<step<<endl;
return 0;
}
//method 2:
#include<iostream>
using namespace std;
int main()
{
int lesser=0,larger=1;
while(larger<num)
{
int temp=larger;
larger=lesser+larger;
lesser=temp;
}
int step=num-lesser;
if(step>larger-num)
step=larger-num;
return step;
}