ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-04-26 09:56:34  阅读:165  来源: 互联网

标签:Fiboncci ++ larger step -- int num Fibonacci method


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;
}

标签:Fiboncci,++,larger,step,--,int,num,Fibonacci,method
来源: https://blog.51cto.com/u_14982125/2733756

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有