测试用例:
2
1 2
3 50
改进前的代码(用递归的方法):
#include<iostream>
using namespace std;
int main()
{
long long getStep(int, int);
int n,a,b;
cin>>n;
while(n--)
{
cin>>a>>b;
cout<<getStep(a,b)<<endl;
}
return 0;
}
long long getStep(int a, int b)
{
b = b - (a-1); //实际上相当于只有1个参数b,a到b换算成从1到t(t这里就是更新后的b,a就为1),步骤都一样
if(b == 2)
{
return 1;
}
if(b == 3)
{
return 2;
}
return getStep(1, b-1) + getStep(1, b-2);
}
改进后的代码(去除递归):
#include<iostream>
using namespace std;
int main()
{
long long getStep(int, int);
int n,a,b;
cin>>n;
while(n--)
{
cin>>a>>b;
cout<<getStep(a,b)<<endl;
}
return 0;
}
long long getStep(int a, int b)
{
b = b - (a-1); //实际上相当于只有1个参数b,a到b换算成从1到t(t这里就是更新后的b,a就为1),步骤都一样
if(b == 2)
{
return 1;
}
if(b == 3)
{
return 2;
}
long long f1 = 1;
long long f2 = 2;
long long step;
for(int i=3; i<b; i++)
{
step = f1 + f2;
f1 = f2;
f2 = step;
}
return step;
}
结果说明:
递归算法第二个测试用例,直接导致程序崩溃,而改进后的方法1000ms之内就出结果,故而尽量避免应用递归。