输入一个数字,通过++或者--将其变为Fiboncci数,最小需要几步???

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;
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值